123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540 |
- $Id$
- cjb.net support by <tg@freewrt.org>
- --- ez-ipupdate-3.0.11b8.orig/ez-ipupdate.c Mon Mar 11 23:31:25 2002
- +++ ez-ipupdate-3.0.11b8/ez-ipupdate.c Tue Jul 31 14:05:00 2007
- @@ -87,6 +87,10 @@
- #define JUSTL_REQUEST "/bin/controlpanel/dyndns/jlc.pl"
- #define JUSTL_VERSION "2.0"
-
- +#define CJB_DEFAULT_SERVER "www.cjb.net"
- +#define CJB_DEFAULT_PORT "80"
- +#define CJB_REQUEST "/cgi-bin/dynip.cgi"
- +
- #define DYNS_DEFAULT_SERVER "www.dyns.cx"
- #define DYNS_DEFAULT_PORT "80"
- #define DYNS_REQUEST "/postscript.php"
- @@ -139,6 +143,9 @@
- #if HAVE_SIGNAL_H
- # include <signal.h>
- #endif
- +#if HAVE_TIME_H
- +# include <time.h>
- +#endif
- #if HAVE_SYS_TIME_H
- # include <sys/time.h>
- #endif
- @@ -165,7 +172,7 @@
- #endif
-
-
- -#if __linux__ || __SVR4 || __OpenBSD__ || __FreeBSD__ || __NetBSD__
- +#if __GLIBC__ || __SVR4 || __OpenBSD__ || __FreeBSD__ || __NetBSD__
- # define IF_LOOKUP 1
- # include <sys/ioctl.h>
- # include <net/if.h>
- @@ -325,6 +332,10 @@ int JUSTL_update_entry(void);
- int JUSTL_check_info(void);
- static char *JUSTL_fields_used[] = { "server", "user", "host", NULL };
-
- +int CJB_update_entry(void);
- +int CJB_check_info(void);
- +static char *CJB_fields_used[] = { "server", "user", NULL };
- +
- int DYNS_update_entry(void);
- int DYNS_check_info(void);
- static char *DYNS_fields_used[] = { "server", "user", "host", NULL };
- @@ -474,6 +485,16 @@ struct service_t services[] = {
- JUSTL_DEFAULT_PORT,
- JUSTL_REQUEST
- },
- + { "cjb.net",
- + { "cjb", 0, 0, },
- + NULL,
- + CJB_update_entry,
- + CJB_check_info,
- + CJB_fields_used,
- + CJB_DEFAULT_SERVER,
- + CJB_DEFAULT_PORT,
- + CJB_REQUEST
- + },
- { "dyns",
- { "dyns", 0, 0, },
- NULL,
- @@ -640,7 +661,7 @@ void print_usage( void )
- fprintf(stdout, " -q, --quiet \t\t\tbe quiet\n");
- fprintf(stdout, " -r, --retrys <num>\t\tnumber of trys (default: 1)\n");
- fprintf(stdout, " -R, --run-as-user <user>\tchange to <user> for running, be ware\n\t\t\t\tthat this can cause problems with handeling\n\t\t\t\tSIGHUP properly if that user can't read the\n\t\t\t\tconfig file. also it can't write it's pid file \n\t\t\t\tto a root directory\n");
- - fprintf(stdout, " -Q, --run-as-euser <user>\tchange to effective <user> for running, \n\t\t\t\tthis is NOT secure but it does solve the \n\t\t\t\tproblems with run-as-user and config files and \n\t\t\t\tpid files.\n");
- + fprintf(stdout, " -Q, --run-as-euser <user>\tchange to effective <user> for running, \n\t\t\t\tthis is NOT secure but it does solve the \n\t\t\t\tproblems with run-as-user and config files and \n\t\t\t\tpid files\n");
- fprintf(stdout, " -s, --server <server[:port]>\tthe server to connect to\n");
- fprintf(stdout, " -S, --service-type <server>\tthe type of service that you are using\n");
- width = fprintf(stdout, "\t\t\t\ttry one of: ") + 4*7;
- @@ -682,7 +703,7 @@ void print_credits( void )
-
- void print_signalhelp( void )
- {
- - fprintf(stdout, "\nsignals are only really used when in daemon mode.\n\n");
- + fprintf(stdout, "\nsignals are only really used when in daemon mode\n\n");
- fprintf(stdout, "signals: \n");
- fprintf(stdout, " HUP\t\tcauses it to re-read its config file\n");
- fprintf(stdout, " TERM\t\twake up and possibly perform an update\n");
- @@ -693,7 +714,7 @@ void print_signalhelp( void )
- #if HAVE_SIGNAL_H
- RETSIGTYPE sigint_handler(int sig)
- {
- - char message[] = "interupted.\n";
- + char message[] = "interrupted\n";
- close(client_sockfd);
- write(2, message, sizeof(message)-1);
-
- @@ -704,6 +725,10 @@ RETSIGTYPE sigint_handler(int sig)
- }
- #endif
-
- +#if HAVE_SYSLOG_H
- + closelog();
- +#endif
- +
- exit(1);
- }
- RETSIGTYPE generic_sig_handler(int sig)
- @@ -798,7 +823,7 @@ void show_message(char *fmt, ...)
- sprintf(buf, "message incomplete because your OS sucks: %s\n", fmt);
- #endif
-
- - syslog(LOG_NOTICE, buf);
- + syslog(LOG_NOTICE, "%s", buf);
- }
- else
- {
- @@ -1439,7 +1464,7 @@ int do_connect(int *sock, char *host, ch
- if(!(options & OPT_QUIET))
- {
- fprintf(stderr,
- - "connected to %s (%s) on port %d.\n",
- + "connected to %s (%s) on port %d\n",
- host,
- inet_ntoa(address.sin_addr),
- ntohs(address.sin_port));
- @@ -1683,7 +1708,7 @@ static int ODS_read_response(char *buf,
- close(client_sockfd);
- return(-1);
- }
- - if(strstr(buf, "\r\n") > 0)
- + if(strstr(buf, "\n") != NULL)
- {
- break;
- }
- @@ -1702,8 +1727,8 @@ int NULL_check_info(void)
-
- if(options & OPT_DAEMON)
- {
- - fprintf(stderr, "no compile time default service was set therefor you must "
- - "specify a service type.\n");
- + fprintf(stderr, "no compile time default service was set, you must "
- + "specify a service type\n");
-
- return(-1);
- }
- @@ -2039,7 +2064,7 @@ int DYNDNS_update_entry(void)
- }
- else if(strstr(buf, "\nnumhost") != NULL)
- {
- - show_message("Too many or too few hosts found\n");
- + show_message("too many or too few hosts found\n");
- retval = UPDATERES_SHUTDOWN;
- }
- else if(strstr(buf, "\ndnserr") != NULL)
- @@ -2051,17 +2076,17 @@ int DYNDNS_update_entry(void)
- }
- else if(strstr(buf, "\n911") != NULL)
- {
- - show_message("Ahhhh! call 911!\n");
- + show_message("ahhhh! call 911!\n");
- retval = UPDATERES_SHUTDOWN;
- }
- else if(strstr(buf, "\n999") != NULL)
- {
- - show_message("Ahhhh! call 999!\n");
- + show_message("ahhhh! call 999!\n");
- retval = UPDATERES_SHUTDOWN;
- }
- else if(strstr(buf, "\n!donator") != NULL)
- {
- - show_message("a feature requested is only available to donators, please donate.\n", host);
- + show_message("a feature requested is only available to donators, please donate\n", host);
- retval = UPDATERES_OK;
- }
- // this one should be last as it is a stupid string to signify waits
- @@ -2095,9 +2120,9 @@ int DYNDNS_update_entry(void)
- sprintf(reason, "problem parsing reason for wait response");
- }
-
- - show_message("Wait response received, waiting for %s before next update.\n",
- + show_message("wait response received, waiting for %s before next update\n",
- format_time(howlong));
- - show_message("Wait response reason: %d\n", N_STR(reason));
- + show_message("wait response reason: %d\n", N_STR(reason));
- sleep(howlong);
- retval = UPDATERES_ERROR;
- }
- @@ -3370,7 +3395,7 @@ int GNUDIP_check_info(void)
- {
- if(!(options & OPT_QUIET))
- {
- - fprintf(stderr, "warning: for GNUDIP the \"address\" parpameter is only used if set to \"0.0.0.0\" thus making an offline request.\n");
- + fprintf(stderr, "warning: for GNUDIP the \"address\" parameter is only used if set to \"0.0.0.0\" thus making an offline request\n");
- }
- }
-
- @@ -3392,7 +3417,7 @@ int GNUDIP_update_entry(void)
-
- // send an offline request if address 0.0.0.0 is used
- // otherwise, we ignore the address and send an update request
- - gnudip_request[0] = strcmp(address, "0.0.0.0") == 0 ? '1' : '0';
- + gnudip_request[0] = address && strcmp(address, "0.0.0.0") == 0 ? '1' : '0';
- gnudip_request[1] = '\0';
-
- // find domainname
- @@ -3660,6 +3685,140 @@ int JUSTL_update_entry(void)
- return(UPDATERES_OK);
- }
-
- +int CJB_check_info(void)
- +{
- + char buf[BUFSIZ+1];
- +
- + if(interface == NULL && address == NULL)
- + {
- + if(options & OPT_DAEMON)
- + {
- + fprintf(stderr, "you must provide either an interface or an address\n");
- + return(-1);
- + }
- + if(interface) { free(interface); }
- + printf("interface: ");
- + *buf = '\0';
- + fgets(buf, BUFSIZ, stdin);
- + chomp(buf);
- + option_handler(CMD_interface, buf);
- + }
- +
- + warn_fields(service->fields_used);
- +
- + return 0;
- +}
- +
- +int CJB_update_entry(void)
- +{
- + char buf[BUFFER_SIZE+1];
- + char *bp = buf;
- + int bytes;
- + int btot;
- + int ret;
- +
- + buf[BUFFER_SIZE] = '\0';
- +
- + if(do_connect((int*)&client_sockfd, server, port) != 0)
- + {
- + if(!(options & OPT_QUIET))
- + {
- + show_message("error connecting to %s:%s\n", server, port);
- + }
- + return(UPDATERES_ERROR);
- + }
- +
- + snprintf(buf, BUFFER_SIZE, "GET %s?", request);
- + output(buf);
- + snprintf(buf, BUFFER_SIZE, "%s=%s&", "username", user_name);
- + output(buf);
- + snprintf(buf, BUFFER_SIZE, "%s=%s", "password", password);
- + output(buf);
- +#if 0
- + /* cjb does IP address autodetection */
- + snprintf(buf, BUFFER_SIZE, "&%s=%s", "ip", address);
- + output(buf);
- +#endif
- + snprintf(buf, BUFFER_SIZE, " HTTP/1.0\015\012");
- + output(buf);
- + snprintf(buf, BUFFER_SIZE, "User-Agent: %s-%s %s [%s] (%s)\015\012",
- + "ez-update", VERSION, OS, (options & OPT_DAEMON) ? "daemon" : "", "by OpenADK");
- + output(buf);
- + snprintf(buf, BUFFER_SIZE, "\015\012");
- + output(buf);
- +
- + bp = buf;
- + bytes = 0;
- + btot = 0;
- + while((bytes=read_input(bp, BUFFER_SIZE-btot)) > 0)
- + {
- + bp += bytes;
- + btot += bytes;
- + dprintf((stderr, "btot: %d\n", btot));
- + }
- + close(client_sockfd);
- + buf[btot] = '\0';
- +
- + dprintf((stderr, "server output: %s\n", buf));
- +
- + if(sscanf(buf, " HTTP/1.%*c %3d", &ret) != 1)
- + {
- + ret = -1;
- + }
- +
- + switch(ret)
- + {
- + case -1:
- + if(!(options & OPT_QUIET))
- + {
- + show_message("strange server response, are you connecting to the right server?\n");
- + }
- + return(UPDATERES_ERROR);
- + break;
- +
- + case 200:
- + if(strstr(buf, " updated ") != NULL)
- + {
- + if(!(options & OPT_QUIET))
- + {
- + printf("request successful\n");
- + }
- + }
- + else
- + {
- + show_message("error processing request\n");
- + if(!(options & OPT_QUIET))
- + {
- + fprintf(stderr, "server output: %s\n", buf);
- + }
- + return(UPDATERES_ERROR);
- + }
- + break;
- +
- + case 401:
- + if(!(options & OPT_QUIET))
- + {
- + show_message("authentication failure\n");
- + }
- + return(UPDATERES_SHUTDOWN);
- + break;
- +
- + default:
- + if(!(options & OPT_QUIET))
- + {
- + // reuse the auth buffer
- + *auth = '\0';
- + sscanf(buf, " HTTP/1.%*c %*3d %255[^\r\n]", auth);
- + show_message("unknown return code: %d\n", ret);
- + show_message("server response: %s\n", auth);
- + }
- + return(UPDATERES_ERROR);
- + break;
- + }
- +
- + return(UPDATERES_OK);
- +}
- +
- int DYNS_check_info(void)
- {
- char buf[BUFSIZ+1];
- @@ -3943,22 +4102,22 @@ int HN_update_entry(void)
- break;
-
- case 201:
- - show_message("Last update was less than %d seconds ago.\n", 300);
- + show_message("last update was less than %d seconds ago\n", 300);
- return(UPDATERES_ERROR);
- break;
-
- case 202:
- - show_message("Server error.\n");
- + show_message("server error\n");
- return(UPDATERES_ERROR);
- break;
-
- case 203:
- - show_message("Failure because account is frozen (by admin).\n");
- + show_message("failure because account is frozen (by admin)\n");
- return(UPDATERES_SHUTDOWN);
- break;
-
- case 204:
- - show_message("Failure because account is locked (by user).\n");
- + show_message("failure because account is locked (by user)\n");
- return(UPDATERES_SHUTDOWN);
- break;
-
- @@ -4215,8 +4374,6 @@ int HEIPV6TB_update_entry(void)
-
- switch(ret)
- {
- - char *p;
- -
- case -1:
- if(!(options & OPT_QUIET))
- {
- @@ -4349,7 +4506,7 @@ void handle_sig(int sig)
- case SIGHUP:
- if(config_file)
- {
- - show_message("SIGHUP recieved, re-reading config file\n");
- + show_message("SIGHUP received, re-reading config file\n");
- if(parse_conf_file(config_file, conf_commands) != 0)
- {
- show_message("error parsing config file \"%s\"\n", config_file);
- @@ -4384,6 +4541,7 @@ void handle_sig(int sig)
-
- int main(int argc, char **argv)
- {
- + char *tmp;
- int ifresolve_warned = 0;
- int i;
- int retval = 1;
- @@ -4395,9 +4553,10 @@ int main(int argc, char **argv)
- mcheck(NULL);
- #endif
-
- - dprintf((stderr, "staring...\n"));
- + dprintf((stderr, "starting...\n"));
-
- - program_name = argv[0];
- + tmp = strrchr(argv[0], '/');
- + program_name = tmp ? tmp + 1 : argv[0];
- options = 0;
- *user = '\0';
- timeout.tv_sec = DEFAULT_TIMEOUT;
- @@ -4417,7 +4576,7 @@ int main(int argc, char **argv)
-
- if(!(options & OPT_QUIET) && !(options & OPT_DAEMON))
- {
- - fprintf(stderr, "ez-ipupdate Version %s\nCopyright (C) 1998-2001 Angus Mackay.\n", VERSION);
- + fprintf(stderr, "%s Version %s\nCopyright (C) 1998-2001 Angus Mackay\n", program_name, VERSION);
- }
-
- dprintf((stderr, "options: 0x%04X\n", options));
- @@ -4434,7 +4593,7 @@ int main(int argc, char **argv)
- {
- if(service->check_info() != 0)
- {
- - fprintf(stderr, "invalid data to perform requested action.\n");
- + fprintf(stderr, "invalid data to perform requested action\n");
- exit(1);
- }
- }
- @@ -4456,13 +4615,13 @@ int main(int argc, char **argv)
- dprintf((stderr, "user_name: %s\n", user_name));
- dprintf((stderr, "password: %s\n", password));
- }
- - if(*user_name == '\0')
- + if(*user_name == '\0' && !(options & OPT_DAEMON))
- {
- printf("user name: ");
- fgets(user_name, sizeof(user_name), stdin);
- chomp(user_name);
- }
- - if(*password == '\0')
- + if(*password == '\0' && !(options & OPT_DAEMON))
- {
- strncpy(password, getpass("password: "), sizeof(password));
- }
- @@ -4480,7 +4639,7 @@ int main(int argc, char **argv)
-
- if(service->check_info() != 0)
- {
- - fprintf(stderr, "invalid data to perform requested action.\n");
- + fprintf(stderr, "invalid data to perform requested action\n");
- exit(1);
- }
-
- @@ -4503,7 +4662,7 @@ int main(int argc, char **argv)
-
- if(interface == NULL)
- {
- - fprintf(stderr, "invalid data to perform requested action.\n");
- + fprintf(stderr, "invalid data to perform requested action\n");
- fprintf(stderr, "you must provide an interface for daemon mode");
- exit(1);
- }
- @@ -4519,23 +4678,25 @@ int main(int argc, char **argv)
- if(fork() > 0) { exit(0); } /* parent */
- }
-
- +# if HAVE_SYSLOG_H
- + openlog(program_name, LOG_PID, LOG_DAEMON );
- + //options |= OPT_QUIET;
- +# endif
- + show_message("version %s, interface %s, host %s, server %s, service %s\n",
- + VERSION, N_STR(interface), N_STR(host), server, service->title);
- +
- #if HAVE_GETPID
- if(pid_file && pid_file_create(pid_file) != 0)
- {
- - fprintf(stderr, "exiting...\n");
- + show_message("could not create pid file %s (%s), exiting\n",
- + pid_file, strerror(errno));
- +#if HAVE_SYSLOG_H
- + closelog();
- +#endif
- exit(1);
- }
- #endif
-
- -# if HAVE_SYSLOG_H
- - openlog(program_name, LOG_PID, LOG_USER );
- - options |= OPT_QUIET;
- -# endif
- - show_message("ez-ipupdate Version %s, Copyright (C) 1998-2001 Angus Mackay.\n",
- - VERSION);
- - show_message("%s started for interface %s host %s using server %s and service %s\n",
- - program_name, N_STR(interface), N_STR(host), server, service->title);
- -
- memset(&sin, 0, sizeof(sin));
-
- if(cache_file)
- @@ -4560,7 +4721,7 @@ int main(int argc, char **argv)
- strftime(timebuf, sizeof(timebuf), "%Y/%m/%d %H:%M", ts);
- show_message("got last update %s on %s from cache file\n", ipstr, timebuf);
- }
- - else
- + else if(ipstr||ipdate)
- {
- show_message("malformed cache file: %s\n", cache_file);
- }
- @@ -4647,7 +4808,7 @@ int main(int argc, char **argv)
- }
- else
- {
- - show_message("failure to update %s->%s (%s)\n",
- + show_message("failed to update %s->%s (%s)\n",
- interface, inet_ntoa(sin.sin_addr), N_STR(host));
- memset(&sin, 0, sizeof(sin));
-
- @@ -4671,7 +4832,7 @@ int main(int argc, char **argv)
- dprintf((stderr, "updateres: %d\n", updateres));
- if(updateres == UPDATERES_SHUTDOWN)
- {
- - show_message("shuting down updater for %s due to fatal error\n",
- + show_message("shutting down updater for %s due to fatal error\n",
- N_STR(host));
-
- if(notify_email && *notify_email != '\0')
- @@ -4711,7 +4872,7 @@ int main(int argc, char **argv)
- #endif
-
- #else
- - fprintf(stderr, "sorry, this mode is only available on platforms that the ");
- + fprintf(stderr, "sorry, this mode is only available on platforms where the ");
- fprintf(stderr, "IP address \ncan be determined. feel free to hack the code");
- fprintf(stderr, " though.\n");
- exit(1);
- @@ -4799,7 +4960,7 @@ int main(int argc, char **argv)
- }
- else
- {
- - show_message("could not resolve ip address for %s.\n", interface);
- + show_message("could not resolve ip address for %s\n", interface);
- exit(1);
- }
- close(sock);
|