Added client code for cloning

SVN revision: 900
This commit is contained in:
2004-06-14 10:58:51 +00:00
parent 95b5d22ecd
commit cf1dfbb25f
+104 -25
View File
@@ -6,6 +6,9 @@
Contents: Web server program for Electronic Logbook ELOG
$Log$
Revision 1.339 2004/06/14 10:58:51 midas
Added client code for cloning
Revision 1.338 2004/06/11 07:14:50 midas
Tested onUnload
@@ -1610,8 +1613,6 @@ int retrieve_url(char *url, char **buffer)
closesocket(sock);
return n;
}
@@ -7789,6 +7790,52 @@ int save_admin_config(char *section, char *buffer, char *error)
/*------------------------------------------------------------------*/
int save_config(char *buffer, char *error)
{
int fh, i;
error[0] = 0;
fh = open(config_file, O_RDWR | O_BINARY, 644);
if (fh < 0) {
sprintf(error, loc("Cannot open file <b>%s</b>"), config_file);
strcat(error, ": ");
strcat(error, strerror(errno));
return 0;
}
#ifdef OS_UNIX
/* under unix, convert CRLF to CR */
remove_crlf(buffer);
#endif
i = write(fh, buffer, strlen(buffer));
if (i < (int) strlen(buffer)) {
sprintf(error, loc("Cannot write to <b>%s</b>"), config_file);
strcat(error, ": ");
strcat(error, strerror(errno));
close(fh);
return 0;
}
#ifdef _MSC_VER
chsize(fh, TELL(fh));
#else
ftruncate(fh, TELL(fh));
#endif
close(fh);
/* force re-read of config file */
check_config();
return 1;
}
/*------------------------------------------------------------------*/
int save_user_config(LOGBOOK * lbs, char *user, BOOL new_user, BOOL activate)
{
char file_name[256], str[256], line[256], *buf, *pl, new_pwd[80], new_pwd2[80];
@@ -9141,9 +9188,11 @@ void combine_url(LOGBOOK * lbs, char *url, char *param, char *result, int size)
if (result[strlen(result) - 1] != '/')
strlcat(result, "/", size);
if (!strstr(result, lbs->name_enc)) {
strlcat(result, lbs->name_enc, size);
strlcat(result, "/", size);
if (lbs != NULL) {
if (!strstr(result, lbs->name_enc)) {
strlcat(result, lbs->name_enc, size);
strlcat(result, "/", size);
}
}
if (param)
@@ -9858,27 +9907,38 @@ void submit_config(LOGBOOK * lbs, char *server, char *buffer, char *error_str)
/*------------------------------------------------------------------*/
void receive_config(LOGBOOK * lbs, char *server, char *error_str)
int receive_config(LOGBOOK * lbs, char *server, char *error_str)
{
char str[256], *buffer, *p;
error_str[0] = 0;
combine_url(lbs, server, "", str, sizeof(str));
sprintf(str + strlen(str), "?cmd=Download");
retrieve_url(str, &buffer);
if (lbs == NULL)
strcat(str, "?cmd=GetConfig"); // request complete config file
else
strcat(str, "?cmd=Download"); // request config section of logbook
if (retrieve_url(str, &buffer) < 0)
return 0;
p = strstr(buffer, "\r\n\r\n");
if (p == NULL) {
free(buffer);
sprintf(error_str, loc("Cannot receive \"%s\""), str);
return;
return 0;
}
p += 4;
if (!save_admin_config(lbs->name, p, str))
rsprintf(str);
if (lbs == NULL) {
if (!save_config(p, str))
rsprintf(str);
} else {
if (!save_admin_config(lbs->name, p, str))
rsprintf(str);
}
free(buffer);
return 1;
}
/*------------------------------------------------------------------*/
@@ -17108,15 +17168,6 @@ void server_loop(int tcp_port, int daemon)
net_buffer = malloc(net_buffer_size);
return_buffer_size = 100000;
return_buffer = malloc(return_buffer_size);
#ifdef OS_WINNT
{
WSADATA WSAData;
/* Start windows sockets */
if (WSAStartup(MAKEWORD(1, 1), &WSAData) != 0)
return;
}
#endif
/* create a new socket */
lsock = socket(AF_INET, SOCK_STREAM, 0);
@@ -18261,7 +18312,8 @@ int main(int argc, char *argv[])
{
int i, fh, tcp_port_cl;
int daemon = FALSE;
char read_pwd[80], write_pwd[80], admin_pwd[80], str[256], logbook[256];
char read_pwd[80], write_pwd[80], admin_pwd[80], str[256], logbook[256],
clone_url[256], error_str[256];
time_t now;
struct tm *tms;
@@ -18279,7 +18331,7 @@ int main(int argc, char *argv[])
tzset();
/* initialize variables */
read_pwd[0] = write_pwd[0] = admin_pwd[0] = logbook[0] = 0;
read_pwd[0] = write_pwd[0] = admin_pwd[0] = logbook[0] = clone_url[0] = 0;
logbook_dir[0] = resource_dir[0] = logbook_dir[0] = pidfile[0] = 0;
tcp_port_cl = 0;
use_keepalive = TRUE;
@@ -18331,9 +18383,14 @@ int main(int argc, char *argv[])
#endif
else if (argv[i][0] == '-') {
if (i + 1 >= argc || argv[i + 1][0] == '-')
if (argv[i][1] == 'C') {
if (i + 1 >= argc || argv[i + 1][0] == '-')
clone_url[0] = 1;
else
strcpy(clone_url, argv[++i]);
} else if (i + 1 >= argc || argv[i + 1][0] == '-')
goto usage;
if (argv[i][1] == 'p')
else if (argv[i][1] == 'p')
tcp_port_cl = atoi(argv[++i]);
else if (argv[i][1] == 'c')
strcpy(config_file, argv[++i]);
@@ -18356,7 +18413,7 @@ int main(int argc, char *argv[])
else {
usage:
printf("\nusage: elogd [-p port] [-n hostname] [-D] [-c file] [-r pwd] ");
printf("[-w pwd] [-a pwd] [-l logbook] [-k] [-f file] [-x]\n\n");
printf("[-w pwd] [-a pwd] [-l logbook] [-k] [-f file] [-C <url>] [-x]\n\n");
printf(" -p <port> TCP/IP port\n");
printf(" -n <hostname> TCP/IP hostname\n");
printf(" -D become a daemon\n");
@@ -18371,6 +18428,7 @@ int main(int argc, char *argv[])
printf(" -k do not use keep-alive\n");
printf(" -f path/filename for PID file\n");
printf(" -x enable execution of shell commands\n\n");
printf(" -C <url> clone remote elogd configuration\n\n");
printf(" -h this help\n\n");
#ifdef OS_WINNT
printf("Windows service funtions:\n");
@@ -18382,6 +18440,16 @@ int main(int argc, char *argv[])
}
}
#ifdef OS_WINNT
{
WSADATA WSAData;
/* Start windows sockets */
if (WSAStartup(MAKEWORD(1, 1), &WSAData) != 0)
return 0;
}
#endif
#ifdef OS_WINNT
if (daemon) {
/* change to directory of executable */
@@ -18395,6 +18463,17 @@ int main(int argc, char *argv[])
}
#endif
/* clone remote elogd configuration */
if (clone_url[0]) {
if (clone_url[0] == 1) {
printf("Please enter URL of remote elogd server: ");
fgets(clone_url, sizeof(clone_url), stdin);
}
/* contact remote server */
receive_config(NULL, clone_url, error_str);
}
/* check for configuration file */
fh = open(config_file, O_RDONLY | O_BINARY);
if (fh < 0) {