6eaf51756c67effbf1b0181e9032ae4d4fd5e41a
[openwrt/svn-archive/archive.git] / net / ez-ipupdate / patches / 002-ez_ipupdate_everydns.patch
1 diff -Naur ez-ipupdate-3.0.11b7/ez-ipupdate.c ez-ipupdate-3.0.11b7-sr1/ez-ipupdate.c
2 --- ez-ipupdate-3.0.11b7/ez-ipupdate.c 2002-03-12 01:31:47.000000000 +0200
3 +++ ez-ipupdate-3.0.11b7-sr1/ez-ipupdate.c 2006-10-08 17:51:40.000000000 +0200
4 @@ -103,6 +103,11 @@
5 #define HEIPV6TB_DEFAULT_PORT "80"
6 #define HEIPV6TB_REQUEST "/index.cgi"
7
8 +#define EVERYDNS_DEFAULT_SERVER "dyn.everydns.net"
9 +#define EVERYDNS_DEFAULT_PORT "80"
10 +#define EVERYDNS_REQUEST "/index.php"
11 +#define EVERYDNS_VERSION "0.1"
12 +
13 #define DEFAULT_TIMEOUT 120
14 #define DEFAULT_UPDATE_PERIOD 120
15 #define DEFAULT_RESOLV_PERIOD 30
16 @@ -341,6 +346,10 @@
17 int HEIPV6TB_check_info(void);
18 static char *HEIPV6TB_fields_used[] = { "server", "user", NULL };
19
20 +int EVERYDNS_update_entry(void);
21 +int EVERYDNS_check_info(void);
22 +static char *EVERYDNS_fields_used[] = { "server", "user", "host", "address", NULL };
23 +
24 struct service_t services[] = {
25 { "NULL",
26 { "null", "NULL", 0, },
27 @@ -514,6 +523,16 @@
28 HEIPV6TB_DEFAULT_PORT,
29 HEIPV6TB_REQUEST
30 },
31 + { "everydns",
32 + { "everydns", 0, 0, },
33 + NULL,
34 + EVERYDNS_update_entry,
35 + EVERYDNS_check_info,
36 + EVERYDNS_fields_used,
37 + EVERYDNS_DEFAULT_SERVER,
38 + EVERYDNS_DEFAULT_PORT,
39 + EVERYDNS_REQUEST
40 + },
41 };
42
43 static struct service_t *service = NULL;
44 @@ -4246,6 +4265,165 @@
45 return(UPDATERES_OK);
46 }
47
48 +int EVERYDNS_check_info(void)
49 +{
50 + warn_fields(service->fields_used);
51 +
52 + return 0;
53 +}
54 +
55 +int EVERYDNS_update_entry(void)
56 +{
57 + char buf[BUFFER_SIZE+1];
58 + char *bp = buf;
59 + int bytes;
60 + int btot;
61 + int ret;
62 +
63 + buf[BUFFER_SIZE] = '\0';
64 +
65 + if(do_connect((int*)&client_sockfd, server, port) != 0)
66 + {
67 + if(!(options & OPT_QUIET))
68 + {
69 + show_message("error connecting to %s:%s\n", server, port);
70 + }
71 + return(UPDATERES_ERROR);
72 + }
73 +
74 + snprintf(buf, BUFFER_SIZE, "GET %s?ver=%s&", request, EVERYDNS_VERSION);
75 + output(buf);
76 + if(address)
77 + {
78 + snprintf(buf, BUFFER_SIZE, "%s=%s&", "ip", address);
79 + output(buf);
80 + }
81 + if((host != NULL) && (*host == '\0'))
82 + {
83 + snprintf(buf, BUFFER_SIZE, "%s=%s&", "domain", host);
84 + output(buf);
85 + }
86 + snprintf(buf, BUFFER_SIZE, " HTTP/1.0\015\012");
87 + output(buf);
88 + snprintf(buf, BUFFER_SIZE, "Authorization: Basic %s\015\012", auth);
89 + output(buf);
90 + snprintf(buf, BUFFER_SIZE, "User-Agent: %s-%s %s [%s] (%s)\015\012",
91 + "ez-update", VERSION, OS, (options & OPT_DAEMON) ? "daemon" : "", "by Angus Mackay");
92 + output(buf);
93 + snprintf(buf, BUFFER_SIZE, "Host: %s\015\012", server);
94 + output(buf);
95 + snprintf(buf, BUFFER_SIZE, "\015\012");
96 + output(buf);
97 +
98 + bp = buf;
99 + bytes = 0;
100 + btot = 0;
101 + while((bytes=read_input(bp, BUFFER_SIZE-btot)) > 0)
102 + {
103 + bp += bytes;
104 + btot += bytes;
105 + dprintf((stderr, "btot: %d\n", btot));
106 + }
107 + close(client_sockfd);
108 + buf[btot] = '\0';
109 +
110 + dprintf((stderr, "server output: %s\n", buf));
111 +
112 + if(sscanf(buf, " HTTP/1.%*c %3d", &ret) != 1)
113 + {
114 + ret = -1;
115 + }
116 +
117 + switch(ret)
118 + {
119 + char *p;
120 +
121 + case -1:
122 + if(!(options & OPT_QUIET))
123 + {
124 + show_message("strange server response, are you connecting to the right server?\n");
125 + }
126 + return(UPDATERES_ERROR);
127 + break;
128 +
129 + case 200:
130 + ret = -1;
131 + if((p=strstr(buf, "Exit code: ")) != NULL)
132 + {
133 + sscanf(p, "Exit code: %d", &ret);
134 + }
135 +
136 + /*
137 + * 0 - Successfully Updated
138 + */
139 + switch(ret)
140 + {
141 + case -1:
142 + if(!(options & OPT_QUIET))
143 + {
144 + show_message("strange server response, are you connecting to the right server?\n");
145 + }
146 + return(UPDATERES_ERROR);
147 + break;
148 +
149 + case 0:
150 + if(!(options & OPT_QUIET))
151 + {
152 + printf("request successful\n");
153 + }
154 + break;
155 +
156 + case 2:
157 + if(!(options & OPT_QUIET))
158 + {
159 + show_message("Bad Username/password\n");
160 + }
161 + return(UPDATERES_SHUTDOWN);
162 + break;
163 +
164 + case 5:
165 + if(!(options & OPT_QUIET))
166 + {
167 + show_message("Last update too recent, please wait...\n");
168 + }
169 + return(UPDATERES_ERROR);
170 + break;
171 +
172 + default:
173 + if(!(options & OPT_QUIET))
174 + {
175 + show_message("unknown return code: %d\n", ret);
176 + fprintf(stderr, "server response: %s\n", buf);
177 + }
178 + return(UPDATERES_ERROR);
179 + break;
180 + }
181 + break;
182 +
183 + case 401:
184 + if(!(options & OPT_QUIET))
185 + {
186 + show_message("authentication failure\n");
187 + }
188 + return(UPDATERES_SHUTDOWN);
189 + break;
190 +
191 + default:
192 + if(!(options & OPT_QUIET))
193 + {
194 + // reuse the auth buffer
195 + *auth = '\0';
196 + sscanf(buf, " HTTP/1.%*c %*3d %255[^\r\n]", auth);
197 + show_message("unknown return code: %d\n", ret);
198 + fprintf(stderr, "server response: %s\n", auth);
199 + }
200 + return(UPDATERES_ERROR);
201 + break;
202 + }
203 +
204 + return(UPDATERES_OK);
205 +}
206 +
207 static int is_in_list(char *needle, char **haystack)
208 {
209 char **p;