close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #67: sftp.tol

File sftp.tol, 5.1 KB (added by hamoros, 21 years ago)

functions for doing secure ftp on a group of files

Line 
1//////////////////////////////////////////////////////////////////////////////
2// FILE    : sftp.tol
3// PURPOSE : Funciones para realizar "ftp" de forma segura.
4//////////////////////////////////////////////////////////////////////////////
5
6//////////////////////////////////////////////////////////////////////////////
7// SFtp common functions
8//////////////////////////////////////////////////////////////////////////////
9
10//////////////////////////////////////////////////////////////////////////////
11Text SFtpFiles(Text localDir,    // Directorio local
12               Text relDir,      // Directorio relativo al local
13               Text filPattern,  // Patron de los ficheros
14               Text tarFile,     // Archivo donde empaquetar los ficheros
15               Real toLower,     // Envio de nombre en minusculas
16               Real casSen)      // Equiparacion sensible a mayus/minusculas
17//////////////////////////////////////////////////////////////////////////////
18{
19  Set  getDir       = GetDir(localDir+relDir);
20  Set  filSet       = getDir[1];
21  Set  dirSet       = getDir[2];
22 
23
24  Set  filList  = EvalSet(filSet, Text(Text fil)
25  {
26    If(TextMatch(fil,filPattern,casSen),
27    {
28      Text filName = If(toLower, ToLower(fil), fil);
29      AppendFile("sftp_"+localDirRoot+".bat",
30           "tar rvf "+"sftp_"+localDirRoot+".tar "+relDir+"/"+filName+"\n");
31      AppendFile("sftp_"+localDirRoot+".sh",
32           "tar rvf "+"sftp_"+localDirRoot+".tar "+relDir+"/"+filName+"\n");
33      ""
34    }, "")
35  });
36 
37  Set  subdirList  = EvalSet(dirSet, Text(Text subDir)
38  {
39    Text dirName = If(toLower, ToLower(subDir), subDir);
40    SFtpFiles(localDir+"/"+dirName, relDir+"/"+dirName, filPattern,
41              tarFile, toLower, casSen)
42  });
43
44  ""
45};
46//////////////////////////////////////////////////////////////////////////////
47PutDescription(
48"En el fichero especificado commandFile, añade las ordenes necesarias para
49comprimir los ficheros de localDir que coinciden con un patron (pattern)
50en el fichero tarFile y recursivamente hace lo mismo para cada subdirectorio
51Si toLower es TRUE toma los nombres de ficheros siempre en minusculas.
52Si casSen es TRUE el match de fichero se realiza sensible a mayusculas y
53minusculas.",
54SFtpFiles);
55//////////////////////////////////////////////////////////////////////////////
56
57
58//////////////////////////////////////////////////////////////////////////////
59Real SFtpBuild(Text hostRootDir,   // Directorio remoto
60               Text localDir,      // Directorio local del web
61               Text localDirRoot,   // Raiz del directorio local
62               Set  filPatterns,   // Conjunto de patrones de los ficheros
63               Text host,          // Nombre del host remoto
64               Text user,          // Nombre del usuario remoto
65               Text password,      // Palabra clave de acceso
66               Real toLower,       // Envio de ficheros en minusculas
67               Real casSen)        // Sensible a mayus/minusculas
68//////////////////////////////////////////////////////////////////////////////
69{
70  Text WriteFile("sftp_"+localDirRoot+".bat", "cd "+localDir+"\n");
71  Text WriteFile("sftp_"+localDirRoot+".sh",  "cd "+localDir+"\n");
72
73  Set EvalSet(filPatterns, Text(Text pattern)
74  {
75    SFtpFiles(localDir, localDirRoot, pattern, "SFtp.tar",
76              toLower, casSen)
77  });
78
79  Text AppendFile("sftp_"+localDirRoot+".bat",
80                  "gzip sftp_"+localDirRoot+".tar\n");
81  Text AppendFile("sftp_"+localDirRoot+".sh",
82                  "gzip sftp_"+localDirRoot+".tar\n");
83  Text AppendFile("sftp_"+localDirRoot+".bat",
84                  "psftp "+user+"@"+host+":"+hostRootDir+
85                  " sftp_"+localDirRoot+".tar.gz\n");
86  Text AppendFile("sftp_"+localDirRoot+".sh",
87                 " sftp_"+localDirRoot+".tar.gz\n"
88                 +user+"@"+host+":"+hostRootDir+"\n");
89//  Text AppendFile("sftp_"+localDirRoot+".bat", "ssh "+user+"@"+host+
90//        " 'cd "+hostRootDir+"; tar xzvpf SFtp.tar.gz"+"'\n");
91  Text AppendFile("sftp_"+localDirRoot+".sh", "ssh "+user+"@"+host+
92        " 'cd "+hostRootDir+"; tar xzvpf SFtp.tar.gz"+"'\n");
93  0.0
94};
95//////////////////////////////////////////////////////////////////////////////
96PutDescription(
97"Crea dos scripts de nombres commandFile con extension .bat y .sh
98para entorno windows y linux respect. con las instrucciones necesarias para
99enviar todos los ficheros que hacen match con filPattern de un directorio
100local (localDir) y de sus subdirectorios.
101Hay que proporcionarle el nombre del host, el usuario (user) y el password y
102el nombre del directorio remoto (hostRootDir) bajo el cual se requiere hacer
103la copia de lo que haya en el subdirectorio localDirRoot de localDir
104        localDir/localDirRoot        hostRootDir
105               /   |    \       ->  /     |     \
106              a    b     c         a      b      c
107Si toLower es minuscula todos los nombres de ficheros y subdirectorios son
108enviados en minusculas, esto es clasico para sistemas UNIX.
109Si casSen es TRUE el math de fichero se realizar sensible a mayusculas y
110minusculas.",
111SFtpBuild);
112//////////////////////////////////////////////////////////////////////////////
113
114
115
116
117
118
119