From: Florian Fainelli Date: Mon, 9 Oct 2006 14:01:12 +0000 (+0000) Subject: Add everydns patch, closes #825 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=5311046d467816254d8c9578e36f0fcd966f1e55;p=openwrt%2Fsvn-archive%2Farchive.git Add everydns patch, closes #825 SVN-Revision: 4986 --- diff --git a/net/ez-ipupdate/patches/ez-ipupdate-everydns.patch b/net/ez-ipupdate/patches/ez-ipupdate-everydns.patch new file mode 100644 index 0000000000..6eaf51756c --- /dev/null +++ b/net/ez-ipupdate/patches/ez-ipupdate-everydns.patch @@ -0,0 +1,209 @@ +diff -Naur ez-ipupdate-3.0.11b7/ez-ipupdate.c ez-ipupdate-3.0.11b7-sr1/ez-ipupdate.c +--- ez-ipupdate-3.0.11b7/ez-ipupdate.c 2002-03-12 01:31:47.000000000 +0200 ++++ ez-ipupdate-3.0.11b7-sr1/ez-ipupdate.c 2006-10-08 17:51:40.000000000 +0200 +@@ -103,6 +103,11 @@ + #define HEIPV6TB_DEFAULT_PORT "80" + #define HEIPV6TB_REQUEST "/index.cgi" + ++#define EVERYDNS_DEFAULT_SERVER "dyn.everydns.net" ++#define EVERYDNS_DEFAULT_PORT "80" ++#define EVERYDNS_REQUEST "/index.php" ++#define EVERYDNS_VERSION "0.1" ++ + #define DEFAULT_TIMEOUT 120 + #define DEFAULT_UPDATE_PERIOD 120 + #define DEFAULT_RESOLV_PERIOD 30 +@@ -341,6 +346,10 @@ + int HEIPV6TB_check_info(void); + static char *HEIPV6TB_fields_used[] = { "server", "user", NULL }; + ++int EVERYDNS_update_entry(void); ++int EVERYDNS_check_info(void); ++static char *EVERYDNS_fields_used[] = { "server", "user", "host", "address", NULL }; ++ + struct service_t services[] = { + { "NULL", + { "null", "NULL", 0, }, +@@ -514,6 +523,16 @@ + HEIPV6TB_DEFAULT_PORT, + HEIPV6TB_REQUEST + }, ++ { "everydns", ++ { "everydns", 0, 0, }, ++ NULL, ++ EVERYDNS_update_entry, ++ EVERYDNS_check_info, ++ EVERYDNS_fields_used, ++ EVERYDNS_DEFAULT_SERVER, ++ EVERYDNS_DEFAULT_PORT, ++ EVERYDNS_REQUEST ++ }, + }; + + static struct service_t *service = NULL; +@@ -4246,6 +4265,165 @@ + return(UPDATERES_OK); + } + ++int EVERYDNS_check_info(void) ++{ ++ warn_fields(service->fields_used); ++ ++ return 0; ++} ++ ++int EVERYDNS_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?ver=%s&", request, EVERYDNS_VERSION); ++ output(buf); ++ if(address) ++ { ++ snprintf(buf, BUFFER_SIZE, "%s=%s&", "ip", address); ++ output(buf); ++ } ++ if((host != NULL) && (*host == '\0')) ++ { ++ snprintf(buf, BUFFER_SIZE, "%s=%s&", "domain", host); ++ 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) ++ { ++ char *p; ++ ++ 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: ++ ret = -1; ++ if((p=strstr(buf, "Exit code: ")) != NULL) ++ { ++ sscanf(p, "Exit code: %d", &ret); ++ } ++ ++ /* ++ * 0 - Successfully Updated ++ */ ++ 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 0: ++ if(!(options & OPT_QUIET)) ++ { ++ printf("request successful\n"); ++ } ++ break; ++ ++ case 2: ++ if(!(options & OPT_QUIET)) ++ { ++ show_message("Bad Username/password\n"); ++ } ++ return(UPDATERES_SHUTDOWN); ++ break; ++ ++ case 5: ++ if(!(options & OPT_QUIET)) ++ { ++ show_message("Last update too recent, please wait...\n"); ++ } ++ return(UPDATERES_ERROR); ++ break; ++ ++ default: ++ if(!(options & OPT_QUIET)) ++ { ++ show_message("unknown return code: %d\n", ret); ++ fprintf(stderr, "server response: %s\n", buf); ++ } ++ return(UPDATERES_ERROR); ++ break; ++ } ++ 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); ++ fprintf(stderr, "server response: %s\n", auth); ++ } ++ return(UPDATERES_ERROR); ++ break; ++ } ++ ++ return(UPDATERES_OK); ++} ++ + static int is_in_list(char *needle, char **haystack) + { + char **p;