mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-09-10 18:23:28 +00:00
Added client code for cloning
SVN revision: 900
This commit is contained in:
parent
95b5d22ecd
commit
cf1dfbb25f
129
src/elogd.c
129
src/elogd.c
@ -6,6 +6,9 @@
|
|||||||
Contents: Web server program for Electronic Logbook ELOG
|
Contents: Web server program for Electronic Logbook ELOG
|
||||||
|
|
||||||
$Log$
|
$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
|
Revision 1.338 2004/06/11 07:14:50 midas
|
||||||
Tested onUnload
|
Tested onUnload
|
||||||
|
|
||||||
@ -1610,8 +1613,6 @@ int retrieve_url(char *url, char **buffer)
|
|||||||
|
|
||||||
closesocket(sock);
|
closesocket(sock);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return n;
|
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)
|
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];
|
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] != '/')
|
if (result[strlen(result) - 1] != '/')
|
||||||
strlcat(result, "/", size);
|
strlcat(result, "/", size);
|
||||||
|
|
||||||
if (!strstr(result, lbs->name_enc)) {
|
if (lbs != NULL) {
|
||||||
strlcat(result, lbs->name_enc, size);
|
if (!strstr(result, lbs->name_enc)) {
|
||||||
strlcat(result, "/", size);
|
strlcat(result, lbs->name_enc, size);
|
||||||
|
strlcat(result, "/", size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param)
|
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;
|
char str[256], *buffer, *p;
|
||||||
|
|
||||||
error_str[0] = 0;
|
error_str[0] = 0;
|
||||||
|
|
||||||
combine_url(lbs, server, "", str, sizeof(str));
|
combine_url(lbs, server, "", str, sizeof(str));
|
||||||
sprintf(str + strlen(str), "?cmd=Download");
|
if (lbs == NULL)
|
||||||
retrieve_url(str, &buffer);
|
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");
|
p = strstr(buffer, "\r\n\r\n");
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
sprintf(error_str, loc("Cannot receive \"%s\""), str);
|
sprintf(error_str, loc("Cannot receive \"%s\""), str);
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
p += 4;
|
p += 4;
|
||||||
|
|
||||||
if (!save_admin_config(lbs->name, p, str))
|
if (lbs == NULL) {
|
||||||
rsprintf(str);
|
if (!save_config(p, str))
|
||||||
|
rsprintf(str);
|
||||||
|
} else {
|
||||||
|
if (!save_admin_config(lbs->name, p, str))
|
||||||
|
rsprintf(str);
|
||||||
|
}
|
||||||
|
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------*/
|
/*------------------------------------------------------------------*/
|
||||||
@ -17108,15 +17168,6 @@ void server_loop(int tcp_port, int daemon)
|
|||||||
net_buffer = malloc(net_buffer_size);
|
net_buffer = malloc(net_buffer_size);
|
||||||
return_buffer_size = 100000;
|
return_buffer_size = 100000;
|
||||||
return_buffer = malloc(return_buffer_size);
|
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 */
|
/* create a new socket */
|
||||||
lsock = socket(AF_INET, SOCK_STREAM, 0);
|
lsock = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
@ -18261,7 +18312,8 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
int i, fh, tcp_port_cl;
|
int i, fh, tcp_port_cl;
|
||||||
int daemon = FALSE;
|
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;
|
time_t now;
|
||||||
struct tm *tms;
|
struct tm *tms;
|
||||||
|
|
||||||
@ -18279,7 +18331,7 @@ int main(int argc, char *argv[])
|
|||||||
tzset();
|
tzset();
|
||||||
|
|
||||||
/* initialize variables */
|
/* 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;
|
logbook_dir[0] = resource_dir[0] = logbook_dir[0] = pidfile[0] = 0;
|
||||||
tcp_port_cl = 0;
|
tcp_port_cl = 0;
|
||||||
use_keepalive = TRUE;
|
use_keepalive = TRUE;
|
||||||
@ -18331,9 +18383,14 @@ int main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
else if (argv[i][0] == '-') {
|
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;
|
goto usage;
|
||||||
if (argv[i][1] == 'p')
|
else if (argv[i][1] == 'p')
|
||||||
tcp_port_cl = atoi(argv[++i]);
|
tcp_port_cl = atoi(argv[++i]);
|
||||||
else if (argv[i][1] == 'c')
|
else if (argv[i][1] == 'c')
|
||||||
strcpy(config_file, argv[++i]);
|
strcpy(config_file, argv[++i]);
|
||||||
@ -18356,7 +18413,7 @@ int main(int argc, char *argv[])
|
|||||||
else {
|
else {
|
||||||
usage:
|
usage:
|
||||||
printf("\nusage: elogd [-p port] [-n hostname] [-D] [-c file] [-r pwd] ");
|
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(" -p <port> TCP/IP port\n");
|
||||||
printf(" -n <hostname> TCP/IP hostname\n");
|
printf(" -n <hostname> TCP/IP hostname\n");
|
||||||
printf(" -D become a daemon\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(" -k do not use keep-alive\n");
|
||||||
printf(" -f path/filename for PID file\n");
|
printf(" -f path/filename for PID file\n");
|
||||||
printf(" -x enable execution of shell commands\n\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");
|
printf(" -h this help\n\n");
|
||||||
#ifdef OS_WINNT
|
#ifdef OS_WINNT
|
||||||
printf("Windows service funtions:\n");
|
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
|
#ifdef OS_WINNT
|
||||||
if (daemon) {
|
if (daemon) {
|
||||||
/* change to directory of executable */
|
/* change to directory of executable */
|
||||||
@ -18395,6 +18463,17 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#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 */
|
/* check for configuration file */
|
||||||
fh = open(config_file, O_RDONLY | O_BINARY);
|
fh = open(config_file, O_RDONLY | O_BINARY);
|
||||||
if (fh < 0) {
|
if (fh < 0) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user