Unix Technical Forum

Suggestd replacement of ap_strtol with the native alternative strtol & strtoul == Patch attached ==

This is a discussion on Suggestd replacement of ap_strtol with the native alternative strtol & strtoul == Patch attached == within the mailing.openbsd.tech forums, part of the OpenBSD category; --> Please find a suggested replacement in continuation of the clean up of httpd where the apache ap_strtol() is replace ...


Go Back   Unix Technical Forum > Unix Operating Systems > OpenBSD > mailing.openbsd.tech

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 02-18-2008, 08:28 AM
Daniel Ouellet
 
Posts: n/a
Default Suggestd replacement of ap_strtol with the native alternative strtol & strtoul == Patch attached ==

Please find a suggested replacement in continuation of the clean up of
httpd where the apache ap_strtol() is replace by the native strtol() and
where unsigned was used by the native strtoul().

I also added the include

#include <stdlib.h>

that define the strtol as well.

Good or bad feedback would be appreciated.

Thanks for your time.

Daniel

PS: I cc Henning and Ray at Ray suggestion in email. If I shouldn't do
it Henning, let me know and I won't do it again.

========================

Index: src/include/httpd.h
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/include/httpd.h,v
retrieving revision 1.27
diff -u -r1.27 httpd.h
--- src/include/httpd.h 22 Feb 2006 15:07:12 -0000 1.27
+++ src/include/httpd.h 29 Mar 2006 06:51:14 -0000
@@ -1160,12 +1160,6 @@

API_EXPORT(extern const char *) ap_psignature(const char *prefix,
request_rec *r);

-/* strtoul does not exist on sunos4. */
-#ifdef strtoul
-#undef strtoul
-#endif
-#define strtoul strtoul_is_not_a_portable_function_use_strtol_inst ead
-
#ifdef __cplusplus
}
#endif
Index: src/main/http_core.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/main/http_core.c,v
retrieving revision 1.21
diff -u -r1.21 http_core.c
--- src/main/http_core.c 22 Feb 2006 15:07:12 -0000 1.21
+++ src/main/http_core.c 29 Mar 2006 06:51:14 -0000
@@ -58,6 +58,8 @@
* University of Illinois, Urbana-Champaign.
*/

+#include <stdlib.h>
+
#define CORE_PRIVATE
#include "httpd.h"
#include "http_config.h"
@@ -2425,11 +2427,9 @@
new->local_addr.sin_addr.s_addr = ap_get_virthost_addr(ips, NULL);
}
errno = 0; /* clear errno before calling strtol */
- port = ap_strtol(ports, &endptr, 10);
- if (errno /* some sort of error */
- || (endptr && *endptr) /* make sure no trailing characters */
- || port < 1 || port > 65535) /* underflow/overflow */
- {
+ port = strtol(ports, &endptr, 10);
+ if(ports[0] == '\0' || *endptr != '\0' || errno == ERANGE
+ || port < 1 || port > 65535) {
return "Missing, invalid, or non-numeric port";
}
new->local_addr.sin_port = htons((unsigned short)port);
@@ -2725,11 +2725,7 @@
return err;
}

- /* WTF: If strtoul is not portable, then write a replacement.
- * Instead we have an idiotic define in httpd.h that prevents
- * it from being used even when it is available. Sheesh.
- */
- conf->limit_req_body = (unsigned long)ap_strtol(arg, (char **)NULL,
10);
+ conf->limit_req_body = strtoul(arg, (char **)NULL, 10);
return NULL;
}

Index: src/main/http_protocol.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/main/http_protocol.c,v
retrieving revision 1.30
diff -u -r1.30 http_protocol.c
--- src/main/http_protocol.c 11 Feb 2006 19:15:57 -0000 1.30
+++ src/main/http_protocol.c 29 Mar 2006 06:51:15 -0000
@@ -64,6 +64,8 @@
* and the Apache Group.
*/

+#include <stdlib.h>
+
#define CORE_PRIVATE
#include "httpd.h"
#include "http_config.h"
@@ -155,7 +157,7 @@
}

if (ap_isdigit(*r->range))
- *start = ap_strtol(r->range, (char **)&r->range, 10);
+ *start = strtol(r->range, (char **)&r->range, 10);
else
*start = -1;

@@ -170,7 +172,7 @@
++r->range;

if (ap_isdigit(*r->range))
- *end = ap_strtol(r->range, (char **)&r->range, 10);
+ *end = strtol(r->range, (char **)&r->range, 10);
else
*end = -1;

@@ -1952,9 +1954,10 @@
else {
char *endstr;
errno = 0;
- r->remaining = ap_strtol(lenp, &endstr, 10);
- if (errno || (endstr && *endstr) || (r->remaining < 0)) {
- conversion_error = 1;
+ r->remaining = strtol(lenp, &endstr, 10);
+ if (errno == ERANGE || lenp[0] == '\0' || *endstr != '\0'
+ || (r->remaining < 0)) {
+ conversion_error = 1;
}
}

Index: src/main/util_uri.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/main/util_uri.c,v
retrieving revision 1.8
diff -u -r1.8 util_uri.c
--- src/main/util_uri.c 2 Dec 2004 19:42:47 -0000 1.8
+++ src/main/util_uri.c 29 Mar 2006 06:51:15 -0000
@@ -61,6 +61,8 @@
*
*/

+#include <stdlib.h>
+
#include "httpd.h"
#include "http_log.h"
#include "http_conf_globals.h" /* for user_id & group_id */
@@ -428,7 +430,7 @@
++s;
uptr->port_str = ap_pstrndup(p, s, uri - s);
if (uri != s) {
- port = ap_strtol(uptr->port_str, &endstr, 10);
+ port = strtol(uptr->port_str, &endstr, 10);
uptr->port = port;
if (*endstr == '\0') {
goto deal_with_path;
@@ -483,7 +485,7 @@
++s;
uptr->port_str = ap_pstrdup(p, s);
if (*s != '\0') {
- uptr->port = (unsigned short)ap_strtol(uptr->port_str, &endstr,
10);
+ uptr->port = (unsigned short)strtol(uptr->port_str, &endstr, 10);
if (*endstr == '\0') {
return HTTP_OK;
}
Index: src/modules/experimental/mod_auth_digest.c
================================================== =================
RCS file:
/cvs/src/usr.sbin/httpd/src/modules/experimental/mod_auth_digest.c,v
retrieving revision 1.19
diff -u -r1.19 mod_auth_digest.c
--- src/modules/experimental/mod_auth_digest.c 9 Feb 2005 12:13:10
-0000 1.19
+++ src/modules/experimental/mod_auth_digest.c 29 Mar 2006 06:51:15 -0000
@@ -131,6 +131,8 @@
* MODULE-DEFINITION-END
*/

+#include <stdlib.h>
+
#include "httpd.h"
#include "http_config.h"
#include "http_conf_globals.h"
@@ -375,7 +377,7 @@
char *endptr;
long lifetime;

- lifetime = ap_strtol(t, &endptr, 10);
+ lifetime = strtol(t, &endptr, 10);
if (endptr < (t+strlen(t)) && !ap_isspace(*endptr))
return ap_pstrcat(cmd->pool, "Invalid time in
AuthDigestNonceLifetime: ", t, NULL);

@@ -549,7 +551,7 @@
}

if (resp->opaque)
- resp->opaque_num = (unsigned long) ap_strtol(resp->opaque, NULL, 16);
+ resp->opaque_num = strtoul(resp->opaque, NULL, 16);

resp->auth_hdr_sts = VALID;
return OK;
@@ -888,7 +890,7 @@
if (!conf->check_nc || !client_mm)
return OK;

- nc = ap_strtol(snc, &endptr, 16);
+ nc = strtol(snc, &endptr, 16);
if (endptr < (snc+strlen(snc)) && !ap_isspace(*endptr)) {
ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r,
"Digest: invalid nc %s received - not a number", snc);
Index: src/modules/proxy/mod_proxy.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/modules/proxy/mod_proxy.c,v
retrieving revision 1.14
diff -u -r1.14 mod_proxy.c
--- src/modules/proxy/mod_proxy.c 9 Feb 2005 12:13:10 -0000 1.14
+++ src/modules/proxy/mod_proxy.c 29 Mar 2006 06:51:15 -0000
@@ -56,6 +56,8 @@
* University of Illinois, Urbana-Champaign.
*/

+#include <stdlib.h>
+
#include "mod_proxy.h"

#define CORE_PRIVATE
@@ -344,7 +346,9 @@

if (r->method_number == M_TRACE &&
(maxfwd_str = ap_table_get(r->headers_in, "Max-Forwards")) !=
NULL) {
- long maxfwd = ap_strtol(maxfwd_str, NULL, 10);
+ long maxfwd;
+
+ maxfwd = strtol(maxfwd_str, NULL, 10);
if (maxfwd < 1) {
int access_status;
r->proxyreq = NOT_PROXY;
Index: src/modules/proxy/proxy_cache.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/modules/proxy/proxy_cache.c,v
retrieving revision 1.18
diff -u -r1.18 proxy_cache.c
--- src/modules/proxy/proxy_cache.c 9 Feb 2005 12:13:10 -0000 1.18
+++ src/modules/proxy/proxy_cache.c 29 Mar 2006 06:51:16 -0000
@@ -58,6 +58,8 @@

/* Cache and garbage collection routines for Apache proxy */

+#include <stdlib.h>
+
#include "mod_proxy.h"
#include "http_conf_globals.h"
#include "http_log.h"
@@ -1411,7 +1413,7 @@
if (clen == NULL)
c->len = -1;
else
- c->len = ap_strtol(clen, NULL, 10);
+ c->len = strtol(clen, NULL, 10);

/* we have all the header information we need - write it to the cache
file */
c->version++;
@@ -1454,7 +1456,7 @@
const char *c_clen_str;
off_t c_clen;
if ( (c_clen_str = ap_table_get(c->hdrs,
"Content-Length")) &&
- ( (c_clen = ap_strtol(c_clen_str, NULL, 10)) > 0) ) {
+ ( (c_clen = strtol(c_clen_str, NULL, 10)) > 0) ) {
ap_table_set(resp_hdrs, "Content-Length",
c_clen_str);
c->len = c_clen;
ap_proxy_sec2hex(c->len, buff + 17 * (6),
Index: src/modules/proxy/proxy_http.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/modules/proxy/proxy_http.c,v
retrieving revision 1.16
diff -u -r1.16 proxy_http.c
--- src/modules/proxy/proxy_http.c 9 Feb 2005 12:13:10 -0000 1.16
+++ src/modules/proxy/proxy_http.c 29 Mar 2006 06:51:16 -0000
@@ -58,6 +58,8 @@

/* HTTP routines for Apache proxy */

+#include <stdlib.h>
+
#include "mod_proxy.h"
#include "http_log.h"
#include "http_main.h"
@@ -527,7 +529,7 @@

content_length = ap_table_get(resp_hdrs, "Content-Length");
if (content_length != NULL) {
- c->len = ap_strtol(content_length, NULL, 10);
+ c->len = strtol(content_length, NULL, 10);

if (c->len < 0) {
ap_kill_timeout(r);
Index: src/modules/proxy/proxy_util.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/modules/proxy/proxy_util.c,v
retrieving revision 1.15
diff -u -r1.15 proxy_util.c
--- src/modules/proxy/proxy_util.c 9 Feb 2005 12:13:10 -0000 1.15
+++ src/modules/proxy/proxy_util.c 29 Mar 2006 06:51:16 -0000
@@ -56,6 +56,8 @@
* University of Illinois, Urbana-Champaign.
*/

+#include <stdlib.h>
+
/* Utility routines for Apache proxy */
#include "mod_proxy.h"
#include "http_main.h"
@@ -984,7 +986,7 @@
if (!ap_isdigit(*addr))
return 0; /* no digit at start of quad */

- ip_addr[quads] = ap_strtol(addr, &tmp, 0);
+ ip_addr[quads] = strtol(addr, &tmp, 0);

if (tmp == addr) /* expected a digit, found something
else */
return 0;
@@ -1008,7 +1010,7 @@

++addr;

- bits = ap_strtol(addr, &tmp, 0);
+ bits = strtol(addr, &tmp, 0);

if (tmp == addr) /* expected a digit, found something
else */
return 0;
Index: src/modules/standard/mod_mime_magic.c
================================================== =================
RCS file: /cvs/src/usr.sbin/httpd/src/modules/standard/mod_mime_magic.c,v
retrieving revision 1.9
diff -u -r1.9 mod_mime_magic.c
--- src/modules/standard/mod_mime_magic.c 9 Feb 2005 12:13:10 -0000 1.9
+++ src/modules/standard/mod_mime_magic.c 29 Mar 2006 06:51:16 -0000
@@ -124,6 +124,8 @@
*
*/

+#include <stdlib.h>
+
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
@@ -1081,7 +1083,7 @@
}

/* get offset, then skip over it */
- m->offset = (int) ap_strtol(l, &t, 0);
+ m->offset = (int) strtol(l, &t, 0);
if (l == t) {
ap_log_error(APLOG_MARK, APLOG_NOERRNO | APLOG_ERR, serv,
MODNAME ": offset %s invalid", l);
@@ -1116,7 +1118,7 @@
if (*l == '+' || *l == '-')
l++;
if (ap_isdigit((unsigned char) *l)) {
- m->in.offset = ap_strtol(l, &t, 0);
+ m->in.offset = strtol(l, &t, 0);
if (*s == '-')
m->in.offset = -m->in.offset;
}
@@ -1204,7 +1206,7 @@
/* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */
if (*l == '&') {
++l;
- m->mask = signextend(serv, m, ap_strtol(l, &l, 0));
+ m->mask = signextend(serv, m, strtol(l, &l, 0));
}
else
m->mask = ~0L;
@@ -1282,7 +1284,7 @@
m->vallen = slen;
}
else if (m->reln != 'x')
- m->value.l = signextend(s, m, ap_strtol(*p, p, 0));
+ m->value.l = signextend(s, m, strtol(*p, p, 0));
return 0;
}

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 10:08 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com