Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 75361 Details for
Bug 116439
ez-ipupdate dnsexit support
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
ez-ipupdate dnsexit support
ez-ipupdate-3.0.11b8-dnsexit-support.path (text/plain), 17.58 KB, created by
Pedro Algarvio
on 2005-12-22 17:27:15 UTC
(
hide
)
Description:
ez-ipupdate dnsexit support
Filename:
MIME Type:
Creator:
Pedro Algarvio
Created:
2005-12-22 17:27:15 UTC
Size:
17.58 KB
patch
obsolete
>diff -Naur ez-ipupdate-3.0.11b8/example-dnsexit.conf ez-ipupdate-3.0.11b8-patched/example-dnsexit.conf >--- ez-ipupdate-3.0.11b8/example-dnsexit.conf 1970-01-01 01:00:00.000000000 +0100 >+++ ez-ipupdate-3.0.11b8-patched/example-dnsexit.conf 2005-12-23 01:21:16.000000000 +0000 >@@ -0,0 +1,20 @@ >+#!/usr/sbin/ez-ipupdate -c >+# >+# example config file for ez-ipupdate >+# >+# this file is actually executable! >+# >+ >+service-type=dnsexit >+user=loginname:password >+host=www.yourdomain.com >+interface=eth0 >+ >+# please ensure the user has permission to write this file >+cache-file=/tmp/ez-ipupdate.cache >+ >+run-as-user=ez-ipupd >+# uncomment this once you have everything working how you want and you are >+# ready to have ez-ipupdate running in the background all the time. to stop it >+# you can use "killall -QUIT ez-ipupdate" under linux. >+#daemon >diff -Naur ez-ipupdate-3.0.11b8/ez-ipupdate.c ez-ipupdate-3.0.11b8-patched/ez-ipupdate.c >--- ez-ipupdate-3.0.11b8/ez-ipupdate.c 2002-03-11 23:31:47.000000000 +0000 >+++ ez-ipupdate-3.0.11b8-patched/ez-ipupdate.c 2005-12-23 01:20:01.000000000 +0000 >@@ -103,6 +103,10 @@ > #define HEIPV6TB_DEFAULT_PORT "80" > #define HEIPV6TB_REQUEST "/index.cgi" > >+#define DNSEXIT_DEFAULT_SERVER "www.dnsexit.com" >+#define DNSEXIT_DEFAULT_PORT "80" >+#define DNSEXIT_REQUEST "/RemoteUpdate.sv" >+ > #define DEFAULT_TIMEOUT 120 > #define DEFAULT_UPDATE_PERIOD 120 > #define DEFAULT_RESOLV_PERIOD 30 >@@ -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> >@@ -341,6 +348,11 @@ > int HEIPV6TB_check_info(void); > static char *HEIPV6TB_fields_used[] = { "server", "user", NULL }; > >+int DNSEXIT_update_entry(void); >+int DNSEXIT_check_info(void); >+static char *DNSEXIT_fields_used[] = { "server", "user", "address", "wildcard", "mx", "host", NULL }; >+ >+ > struct service_t services[] = { > { "NULL", > { "null", "NULL", 0, }, >@@ -514,6 +526,16 @@ > HEIPV6TB_DEFAULT_PORT, > HEIPV6TB_REQUEST > }, >+ { "dnsexit", >+ { "dnsexit", 0, 0, }, >+ NULL, >+ DNSEXIT_update_entry, >+ DNSEXIT_check_info, >+ DNSEXIT_fields_used, >+ DNSEXIT_DEFAULT_SERVER, >+ DNSEXIT_DEFAULT_PORT, >+ DNSEXIT_REQUEST >+ }, > }; > > static struct service_t *service = NULL; >@@ -640,7 +662,7 @@ > 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 +704,7 @@ > > 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 +715,7 @@ > #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 +726,10 @@ > } > #endif > >+#if HAVE_SYSLOG_H >+ closelog(); >+#endif >+ > exit(1); > } > RETSIGTYPE generic_sig_handler(int sig) >@@ -798,7 +824,7 @@ > sprintf(buf, "message incomplete because your OS sucks: %s\n", fmt); > #endif > >- syslog(LOG_NOTICE, buf); >+ syslog(LOG_NOTICE, "%s", buf); > } > else > { >@@ -1439,7 +1465,7 @@ > 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 +1709,7 @@ > close(client_sockfd); > return(-1); > } >- if(strstr(buf, "\r\n") > 0) >+ if(strstr(buf, "\n") != NULL) > { > break; > } >@@ -1702,8 +1728,8 @@ > > 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 +2065,7 @@ > } > 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 +2077,17 @@ > } > 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 +2121,9 @@ > 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 +3396,7 @@ > { > 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 +3418,7 @@ > > // 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 >@@ -3943,22 +3969,22 @@ > 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 +4241,6 @@ > > switch(ret) > { >- char *p; >- > case -1: > if(!(options & OPT_QUIET)) > { >@@ -4246,6 +4270,174 @@ > return(UPDATERES_OK); > } > >+int DNSEXIT_check_info(void) >+{ >+ char buf[BUFSIZ+1]; >+ >+ if((host == NULL) || (*host == '\0')) >+ { >+ if(options & OPT_DAEMON) >+ { >+ return(-1); >+ } >+ if(host) { free(host); } >+ printf("host: "); >+ *buf = '\0'; >+ fgets(buf, BUFSIZ, stdin); >+ host = strdup(buf); >+ chomp(host); >+ } >+ >+ 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 DNSEXIT_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?action=edit&", request); >+ output(buf); >+ if(address != NULL && *address != '\0') >+ { >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "myip", address); >+ output(buf); >+ } >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "wildcard", wildcard ? "ON" : "OFF"); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "mx", mx); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "backmx", *mx == '\0' ? "NO" : "YES"); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "host", host); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "login", user_name); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "%s=%s&", "password", password); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, " HTTP/1.0\015\012"); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "Authorization: Basic %s\015\012", auth); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "User-Agent: %s-%s %s [%s] (%s)\015\012", >+ "ez-update", VERSION, OS, (options & OPT_DAEMON) ? "daemon" : "", "by Angus Mackay"); >+ output(buf); >+ snprintf(buf, BUFFER_SIZE, "Host: %s\015\012", server); >+ 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, "0=Success") != NULL) >+ { >+ if(!(options & OPT_QUIET)) >+ { >+ printf("Request successful\n"); >+ } >+ } >+ else if(strstr(buf, "1=IP stays same") != NULL) >+ { >+ if(!(options & OPT_QUIET)) >+ { >+ printf("Request successful but the IP is the same as previous update\n"); >+ } >+ } >+ else >+ { >+ show_message("Errors return from server\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); >+} >+ > static int is_in_list(char *needle, char **haystack) > { > char **p; >@@ -4349,7 +4541,7 @@ > 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 +4576,7 @@ > > int main(int argc, char **argv) > { >+ char *tmp; > int ifresolve_warned = 0; > int i; > int retval = 1; >@@ -4395,9 +4588,10 @@ > 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 +4611,7 @@ > > 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 +4628,7 @@ > { > 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 +4650,13 @@ > 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 +4674,7 @@ > > 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 +4697,7 @@ > > 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 +4713,25 @@ > 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 +4756,7 @@ > 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 +4843,7 @@ > } > 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 +4867,7 @@ > 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 +4907,7 @@ > #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 +4995,7 @@ > } > 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);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 116439
:
75361
|
75362
|
75363
|
75367
|
75368