You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

327 lines
9.7 KiB

Index: armor.c
--- armor.c.orig 2002-09-05 15:12:16 +0200
+++ armor.c 2006-11-01 14:58:20 +0100
@@ -323,9 +323,9 @@
}
const unsigned char headerline_head[] = "-----BEGIN PGP ";
-const unsigned char headerline_tail[] = ("-----\n"
+const unsigned char headerline_tail[] = "-----\n"
"Version: PGP Key Server "
- PKS_VERSION "\n\n");
+ PKS_VERSION "\n\n";
const unsigned char tailline_head[] = "-----END PGP ";
const unsigned char tailline_tail[] = "-----\n";
Index: kd_delete.c
--- kd_delete.c.orig 2002-11-12 06:03:36 +0100
+++ kd_delete.c 2006-11-01 14:57:18 +0100
@@ -207,7 +207,7 @@
/* fatal errors */
if (err.fatal) {
- log_fatal("ks_delete", err.str);
+ log_fatal("kd_delete", err.str);
/* never returns */
}
Index: kd_generic.c
--- kd_generic.c.orig 2002-09-08 22:54:24 +0200
+++ kd_generic.c 2006-11-01 14:57:18 +0100
@@ -41,7 +41,7 @@
DB *worddb = NULL;
DB *timedb = NULL;
-DB *keydb(DBT *key)
+int get_keydb_num(DBT *key)
{
/* keyid's are 8 bytes, msb first. so start from the end. use 16
bits, since that's enough to divide by any small number of db
@@ -51,7 +51,12 @@
keyidnum = (keydata[KEYDB_KEYID_BYTES-2]<<8)|keydata[KEYDB_KEYID_BYTES-1];
- return(keydb_files[keyidnum % num_keydb]);
+ return (keyidnum % num_keydb);
+}
+
+DB *keydb(DBT *key)
+{
+ return (keydb_files[get_keydb_num (key)]);
}
int kd_add_userid_to_wordlist(llist *wl,
@@ -179,7 +184,7 @@
if ((*(keydb(&key)->put))(keydb(&key), tid, &key, &newdata, 0) < 0) {
xbuffer_free(&newxb);
err->fatal = 1;
- sprintf(err->buf, "error %s keydb, errno = %d", "writing to", errno);
+ sprintf(err->buf, "error writing to keydb[%d], errno = %d", get_keydb_num(&key), errno);
fail();
}
@@ -356,7 +361,7 @@
goto do_create;
for (i=0; i<num_keydb; i++) {
- sprintf(line, "keydb%03d", i);
+ sprintf(line, "%s/keydb%03d", dbdir, i);
unlink(line);
}
Index: kd_get.c
--- kd_get.c.orig 2002-10-08 06:04:42 +0200
+++ kd_get.c 2006-11-01 14:57:18 +0100
@@ -163,7 +163,7 @@
/* fatal errors */
if (err.fatal)
- log_fatal("ks_get", err.str);
+ log_fatal("kd_get", err.str);
/* keep the compiler quiet */
Index: kd_index.c
--- kd_index.c.orig 2003-01-26 20:54:45 +0100
+++ kd_index.c 2006-11-01 14:57:18 +0100
@@ -107,7 +107,7 @@
char buf[512];
sprintf(buf, " %.*s\n",
- (int) ue->uidplen, ue->uidprint);
+ ue->uidplen < 255 ? (int) ue->uidplen : 255, ue->uidprint);
if (!xbuffer_append_str(s->xb, buf))
return(0);
@@ -197,7 +197,7 @@
c_tm->tm_year+1900, c_tm->tm_mon+1, c_tm->tm_mday,
(ke->revocation.len?
"*** KEY REVOKED ***\n ":""),
- (int) ke->primary->uidplen,
+ ke->primary->uidplen < 255 ? (int) ke->primary->uidplen : 255,
ke->primary->uidprint);
if (!xbuffer_append_str(s->xb, buf))
@@ -283,7 +283,7 @@
ke->keyidbits.buf[5],
ke->keyidbits.buf[6],
ke->keyidbits.buf[7],
- ke->keytype,ke->modsigbits,ke->create_time,
+ ke->keytype,ke->modsigbits,(unsigned long)ke->create_time,
ke->revocation.len?"r":"",
ke->disabled?"d":""
);
Index: kd_search.c
--- kd_search.c.orig 2003-02-02 18:22:27 +0100
+++ kd_search.c 2006-11-01 14:57:18 +0100
@@ -397,7 +397,7 @@
{
ddesc keyid;
long sigclass;
- long sig_time;
+ time_t sig_time;
sigs_elem *se;
int ret;
static unsigned char maxid[8] = {0xff, 0xff, 0xff, 0xff,
Index: kd_since.c
--- kd_since.c.orig 2002-09-04 23:00:23 +0200
+++ kd_since.c 2006-11-01 14:57:18 +0100
@@ -123,11 +123,13 @@
ows.err = err;
ows.append = kd_keys_elem_marshall;
- for (i=0; i<entries.len; i+=12)
- if (i && memcmp((void *) (entries.buf+i-12),
- (void *) (entries.buf+i), 12) &&
- (!kd_output_wde((void *) (entries.buf+i), (void *) &ows)))
- return(0);
+ for (i = 12; i <= entries.len; i += 12) {
+ if (memcmp((void *)(entries.buf + i - 12),
+ (void *)(entries.buf + i), 12) &&
+ (!kd_output_wde((void *)(entries.buf + i - 12), (void *) &ows))) {
+ return (0);
+ }
+ }
xbuffer_free(&entries);
@@ -220,7 +222,7 @@
/* fatal errors */
if (err.fatal)
- log_fatal("ks_get", err.str);
+ log_fatal("kd_since", err.str);
/* keep the compiler quiet */
Index: mail_req.c
--- mail_req.c.orig 2002-09-08 21:27:34 +0200
+++ mail_req.c 2006-11-01 14:57:18 +0100
@@ -236,6 +236,7 @@
if (hfrom == -1 || hfrom_len == 0) {
log_error("mail_req", "mail message does not have From: header");
+ (*msc)(0, c); /* presumably spam; toss it */
return;
}
Index: pgputil.c
--- pgputil.c.orig 2003-01-26 17:08:58 +0100
+++ pgputil.c 2006-11-01 14:57:18 +0100
@@ -121,6 +121,11 @@
if (!decode_num(data, 2, &(mpi->nbits)))
return(0);
+ /* skip packets with 0-length MPIs for GPG's benefit (gnupg-1.4.2) */
+ if (mpi->nbits == 0) {
+ return (0);
+ }
+
return(decode_bytestr(data, (mpi->nbits+7)/8, &(mpi->number)));
}
@@ -433,7 +438,8 @@
data, so making it a pointer to static data will work
fine. */
if (keyid->size == 0) {
- static unsigned char boguskeyid[8] = "????????";
+ static unsigned char boguskeyid[8];
+ memset((void *)&boguskeyid, 0, (size_t)8);
keyid->data = boguskeyid;
keyid->size = sizeof(boguskeyid);
keyid->offset = 0;
Index: pks_socket.c
--- pks_socket.c.orig 2002-09-04 22:48:53 +0200
+++ pks_socket.c 2006-11-01 14:57:18 +0100
@@ -208,7 +208,7 @@
#ifdef HAVE_SOCKLEN_T
socklen_t sunlen;
#else
- int sunlen;
+ unsigned int sunlen;
#endif
int srv;
Index: pks_www.c
--- pks_www.c.orig 2003-01-06 19:52:27 +0100
+++ pks_www.c 2006-11-01 14:57:18 +0100
@@ -95,6 +95,7 @@
void w_error(int fd, int vers, unsigned char *str, long len)
{
xbuffer xb;
+ const char *no_match = "No matching keys in database";
xbuffer_alloc(&xb);
@@ -104,7 +105,10 @@
log_fatal("w_error", "constructing reply");
}
- w_reply(fd, vers, NULL, xb.buf, xb.len);
+ if (strstr((const char *)str, no_match))
+ www_reply(fd, vers, 404, "Not Found", NULL, xb.buf, xb.len);
+ else /* generic error handler - w_reply hands back 200. wrong! */
+ www_reply(fd, vers, 500, "Server Error", NULL, xb.buf, xb.len);
xbuffer_free(&xb);
}
Index: pkscheck.c
--- pkscheck.c.orig 2003-02-07 02:01:21 +0100
+++ pkscheck.c 2006-11-01 14:57:18 +0100
@@ -83,6 +83,12 @@
log_error("main", buf);
}
+ memset (&ikey, 0, sizeof (ikey));
+ memset (&idata, 0, sizeof (idata));
+
+ memset (&kkey, 0, sizeof (kkey));
+ memset (&kdata, 0, sizeof (kdata));
+
for (ret = (*(cursor->c_get))(cursor, &ikey, &idata, DB_FIRST);
ret == 0;
ret = (*(cursor->c_get))(cursor, &ikey, &idata, DB_NEXT)) {
@@ -97,7 +103,8 @@
kkey.size = 4;
kkey.data = ((unsigned char *) idata.data)+i+8;
- if ((*(keydb(&kkey)->get))(keydb(&kkey), NULL, &kkey, &kdata, 0)) {
+ if ((((unsigned long *) kkey.data)[0] > 0) &&
+ (*(keydb(&kkey)->get))(keydb(&kkey), NULL, &kkey, &kdata, 0)) {
sprintf(buf, "keyid %02X%02X%02X%02X in timedb but not keydb\n",
((unsigned char *) kkey.data)[0],
((unsigned char *) kkey.data)[1],
Index: www.c
--- www.c.orig 2003-02-07 02:01:21 +0100
+++ www.c 2006-11-01 14:57:18 +0100
@@ -33,7 +33,6 @@
#define TCPDSERVICE "pksd"
int allow_severity=LOG_WARNING ;
int deny_severity=LOG_WARNING ;
- char *yp_get_default_domain="" ;
extern int hosts_ctl(char *daemon,
char *client_name, char *client_addr,char *client_user) ;
@@ -109,7 +108,7 @@
char num[20];
if(content_type==NULL)
- content_type="text/html";
+ content_type="text/html;charset=utf-8";
if ((xb = (xbuffer *) malloc(sizeof(xbuffer))) == NULL)
log_fatal("www_reply", "failed allocating memory for xbuffer");
@@ -138,12 +137,20 @@
}
if ((status_code/100) == 4) {
- if (!xbuffer_append_str(xb, "<HEAD><TITLE>") ||
+ if (!xbuffer_append_str(xb,
+ "<?xml version=\"1.0\"?>\015\012"
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\015\012"
+ " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\015\012"
+ "<html xmlns=\"http://www.w3.org/1999/xhtml\">\015\012"
+ " <head>\015\012"
+ " <title>") ||
!xbuffer_append_str(xb, num) ||
!xbuffer_append_str(xb, reason_phrase) ||
- !xbuffer_append_str(xb, "</TITLE></HEAD><BODY>") ||
- !xbuffer_append(xb, reply, replylen) ||
- !xbuffer_append_str(xb, "</BODY>\015\012")) {
+ !xbuffer_append_str(xb, "</title>\015\012"
+ " </head>\015\012"
+ " <body>") ||
+ !xbuffer_append(xb, reply, replylen) ||
+ !xbuffer_append_str(xb, " </body>\015\012" "</html>\015\012")) {
xbuffer_free(xb);
log_fatal("www_reply", "failed constructing www error reply");
}
@@ -387,12 +394,18 @@
}
}
} else if (is_token(input+s->method, s->method_len, post, post_len, 0)) {
- if ((s->content_length == 0) || readonly) {
+ if (s->content_length == 0) {
www_reply(fd, 1000, 400, bad_request, NULL, NULL, 0);
mp_delete_read(fd);
xbuffer_free(&(s->xb));
free(s);
return;
+ }else if (readonly) {
+ www_reply (fd, 1000, 403, "Forbidden", NULL, NULL, 0);
+ mp_delete_read(fd);
+ xbuffer_free(&(s->xb));
+ free(s);
+ return;
}
} else {
www_reply(fd, 1000, 400, bad_request, NULL, NULL, 0);
@@ -423,7 +436,7 @@
#ifdef HAVE_SOCKLEN_T
socklen_t sinlen;
#else
- int sinlen;
+ unsigned int sinlen;
#endif
int srv;
unsigned long addr;