From 04d3c2c66c02959c3ee5b738909cc675c38708ba Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 14 Sep 2010 18:04:33 -0600 Subject: [PATCH] Results of code review --- doc/2010-10-NMT/chase.pdf | Bin 65440 -> 65437 bytes doc/2010-10-NMT/chase.svg | 6 ++-- doc/2010-10-NMT/pacman2.pdf | Bin 66743 -> 66743 bytes doc/2010-10-NMT/pacman2.svg | 12 +++++-- doc/2010-10-NMT/ship.pdf | Bin 85660 -> 85660 bytes doc/2010-10-NMT/ship.svg | 6 ++-- doc/packages.txt | 49 +++++++++++++++++++++++++++++ src/Makefile | 1 + src/claim.cgi.c | 18 ++++++----- src/common.c | 61 ++++++++++++++++++++++-------------- src/common.h | 3 +- src/in.tokend.c | 20 ++++++------ src/puzzler.cgi.c | 26 +++++++-------- src/puzzles.cgi.c | 18 ++++++++--- 14 files changed, 153 insertions(+), 67 deletions(-) create mode 100644 doc/packages.txt diff --git a/doc/2010-10-NMT/chase.pdf b/doc/2010-10-NMT/chase.pdf index 16ae5054620f1ea6064210a6319dadc32a8ec3ef..da5793ea40c7dc38282dbe24cc18bc778bf68b41 100644 GIT binary patch delta 7115 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 diff --git a/doc/2010-10-NMT/chase.svg b/doc/2010-10-NMT/chase.svg index 2b233af..734cc39 100644 --- a/doc/2010-10-NMT/chase.svg +++ b/doc/2010-10-NMT/chase.svg @@ -42,8 +42,8 @@ inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" - inkscape:window-width="704" - inkscape:window-height="1010" + inkscape:window-width="1276" + inkscape:window-height="1006" inkscape:window-x="0" inkscape:window-y="14" /> and NMT ACS chapterand NMT ACM chapterw!~itG&5%# zIfuA~g@+UMW!>;!*!!;(6(1;8QSmDGD(X*e7#GJFl8O%63foSRS#!#*a2rgnF;Z-k zJ2+g)Y|lMvSlZa)A4Sqt&2d*dju^ zi_64vRgqiq>Td1|7k@j2EYVi1Zb-KIPJOK6IvH_jgp=|stpTObLE)v`U8Bjc>M3ix z`lVU1Z&~avyGOf3(N7$Y$#n@+t7S|V$gcfJ2g*xm804NqvnZ8pn{tPNEjGD5JMORa zC0t42>4q$C(O#rjeV)+9vVSiA$e~{P$NY z053bCOVG}-#COpJH0CUv#lJcSG7il9zazRnpnzlH*+P9#0>edqRPv@yJqgNs$Q{(= zWPvM%=TH=XGFS$@QyEEBk@P=dRgc~Z{*x|}KQ<(2s)*(WHz+Jx+sHztdTvwnkNdIf wp(-bku*lzt!rY(K@nbP65ZirG_YbG8gh2lDvqLV&pSJ%8Mjp;%vy&hsRhZi>P%Nyjt(Cv!DZCC{|hVF83WFI5N zIJt$xmrNdasbOkkkADdmimf&^qNe__w37&R4Qn&9U5 z#b;uscF^*8s0i^H8_mS`(hw@v!`Dn=p~r7+lwY`pTusViSu?&6sgJ9l7+W$bWye z0`RsI+63(!OMDkyKx57h^7vQhK*oW2|96Df2NZBDJX@>}N?^Fik4oOusYgLsPq~Ad zoGfsq@EnTbPX^0?cPb;PDw6&;tm@HQ!GF_563B)OO%>7HHvol2>l<09RL^aS{&7Ec wJyqoh5*GOzQJDLaI({rh1!B7|>i*%_l@Q2(es;*^_|x|P0_o0_vy&hs + id="defs2569"> + + and NMT ACS chapterand NMT ACM chapter?IvkZUq&_kORT&zY8s{QgY>`qu>{ zG{kp3zuaq+8GN=ejVm~dmU%}a$k}8!~VBKfBSEo`+WC(fFvm_ z>8{^I)O$c;B$)g8Wy|FDbBN9={<_`HR`{{szKN_oTDhNv6qA4M{ygQ3$s>mzank2p!!8L zJh%I;Xx@X$YscU|e+%r(n!J9yasS4>v`yo}=_W1j%jji3>)T5Cqxa4knj@9}{WTGv z{8a?^uk!S-ZK?KUO?=r>*Zbz*PF(g>=HI`00Q&wvc?rgMS#oCad|

h_n1J=MDDn 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 Z#~=Rj`p$~h0F0G^CbMU1HRNsf(7*ry delta 25802 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 diff --git a/doc/2010-10-NMT/ship.svg b/doc/2010-10-NMT/ship.svg index 30374cb..c2eb5cf 100644 --- a/doc/2010-10-NMT/ship.svg +++ b/doc/2010-10-NMT/ship.svg @@ -70,8 +70,8 @@ inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" - inkscape:window-width="704" - inkscape:window-height="1010" + inkscape:window-width="1276" + inkscape:window-height="1006" inkscape:window-x="0" inkscape:window-y="14" showguides="true" @@ -119,7 +119,7 @@ sodipodi:role="line" x="381.88013" y="787.68048" - id="tspan2823">and NMT ACS chapterand NMT ACM chapter #include "common.h" +#ifdef NODUMP +# define DUMPf(fmt, args...) +#else +# define DUMPf(fmt, args...) fprintf(stderr, "%s:%s:%d " fmt "\n", __FILE__, __FUNCTION__, __LINE__, ##args) +#endif +#define DUMP() DUMPf("") +#define DUMP_d(v) DUMPf("%s = %d", #v, v) +#define DUMP_x(v) DUMPf("%s = 0x%x", #v, v) +#define DUMP_s(v) DUMPf("%s = %s", #v, v) +#define DUMP_c(v) DUMPf("%s = '%c' (0x%02x)", #v, v, v) +#define DUMP_p(v) DUMPf("%s = %p", #v, v) + + +#define POST_MAX 1024 + /* * CGI */ @@ -51,6 +66,9 @@ read_char_stdin() char *p = getenv("CONTENT_LENGTH"); if (p) { inlen = atoi(p); + if (inlen > POST_MAX) { + inlen = POST_MAX; + } } else { inlen = 0; } @@ -224,7 +242,7 @@ cgi_error(char *fmt, ...) */ -#define EOL(c) ((EOF == (c)) || (0 == (c)) || ('\n' == (c))) +#define EOL(c) ((EOF == (c)) || ('\n' == (c))) int fgrepx(char const *needle, char const *filename) @@ -240,19 +258,20 @@ fgrepx(char const *needle, char const *filename) /* This list of cases would have looked so much nicer in OCaml. I apologize. */ - if (EOL(c) && (0 == *p)) { + if (EOL(c) && ('\0' == *p)) { found = 1; break; - } else if (EOF == c) { + } else if (EOF == c) { /* End of file */ break; - } else if ((0 == p) || (*p != c)) { + } else if (('\0' == p) || (*p != c)) { p = needle; + /* Discard the rest of the line */ do { c = fgetc(f); } while (! EOL(c)); - } else if ('\n' == c) { + } else if (EOL(c)) { p = needle; - } else { + } else { /* It matched */ p += 1; } } @@ -271,7 +290,7 @@ my_snprintf(char *buf, size_t buflen, char *fmt, ...) va_start(ap, fmt); len = vsnprintf(buf, buflen - 1, fmt, ap); va_end(ap); - buf[buflen] = '\0'; + buf[buflen - 1] = '\0'; if (len >= buflen) { return buflen - 1; } else { @@ -320,8 +339,8 @@ team_exists(char const *teamhash) } } - /* lstat seems to be the preferred way to check for existence. */ - ret = lstat(srv_path("teams/names/%s", teamhash), &buf); + /* stat seems to be the preferred way to check for existence. */ + ret = stat(srv_path("teams/names/%s", teamhash), &buf); if (-1 == ret) { return 0; } @@ -396,27 +415,23 @@ award_points(char const *teamhash, return 0; } +/** Award points iff they haven't been logged. + + If [line] is not in [dbfile], append it and give [points] to [team] + in [category]. +*/ void award_and_log_uniquely(char const *team, char const *category, long points, char const *dbfile, - char const *fmt, ...) + char const *line) { char *dbpath = srv_path(dbfile); - char line[200]; - int len; int ret; int fd; - va_list ap; /* Make sure they haven't already claimed these points */ - va_start(ap, fmt); - len = vsnprintf(line, sizeof(line), fmt, ap); - va_end(ap); - if (sizeof(line) <= len) { - cgi_error("Log line too long"); - } if (fgrepx(line, dbpath)) { cgi_page("Already claimed", "

Your team has already claimed these points.

"); @@ -437,11 +452,11 @@ award_and_log_uniquely(char const *team, } /* Log that we did so */ - /* We can turn that trailing NUL into a newline now since write - doesn't use C strings */ - line[len] = '\n'; lseek(fd, 0, SEEK_END); - if (-1 == write(fd, line, len+1)) { + if (-1 == write(fd, line, strlen(line))) { + cgi_error("Unable to append log"); + } + if (-1 == write(fd, "\n", 1)) { cgi_error("Unable to append log"); } close(fd); diff --git a/src/common.h b/src/common.h index 3d55abb..b5b4139 100644 --- a/src/common.h +++ b/src/common.h @@ -5,6 +5,7 @@ #define TEAM_MAX 40 #define CAT_MAX 40 +#define TOKEN_MAX 40 int cgi_init(char *global_argv[]); size_t cgi_item(char *str, size_t maxlen); @@ -24,6 +25,6 @@ void award_and_log_uniquely(char const *team, char const *category, long points, char const *logfile, - char const *fmt, ...); + char const *line); #endif diff --git a/src/in.tokend.c b/src/in.tokend.c index 7cd37c7..c043b78 100644 --- a/src/in.tokend.c +++ b/src/in.tokend.c @@ -120,18 +120,18 @@ main(int argc, char *argv[]) bubblebabble(digest, crap, itokenlen); /* Append digest to service name. */ - tokenlen = (size_t)snprintf(token, sizeof(token), - "%s:%s", - service, digest); + tokenlen = (size_t)my_snprintf(token, sizeof(token), + "%s:%s", + service, digest); } /* Write that token out now. */ { - int fd; - int ret; + int fd; + int ret; do { - fd = open(srv_path("tokens.db"), O_WRONLY | O_CREAT, 0644); + fd = open(srv_path("tokens.db"), O_WRONLY | O_CREAT, 0666); if (-1 == fd) break; ret = lockf(fd, F_LOCK, 0); @@ -150,16 +150,18 @@ main(int argc, char *argv[]) if (-1 == ret) break; } while (0); - if (-1 == ret) { + if ((-1 == fd) || (-1 == ret)) { printf("!%s", strerror(errno)); return 0; } } /* Encrypt the token. Note that now tokenlen is in uint32_ts, not - chars! */ + chars! Also remember that token must be big enough to hold a + multiple of 4 chars, since tea will go ahead and jumble them up for + you. If the compiler aligns words this shouldn't be a problem. */ { - tokenlen = (tokenlen + (tokenlen % 4)) / 4; + tokenlen = (tokenlen + (tokenlen % sizeof(uint32_t))) / sizeof(uint32_t); tea_encode(key, (uint32_t *)token, tokenlen); } diff --git a/src/puzzler.cgi.c b/src/puzzler.cgi.c index 2fa900a..3886a7d 100644 --- a/src/puzzler.cgi.c +++ b/src/puzzler.cgi.c @@ -1,19 +1,14 @@ #include #include "common.h" - int main(int argc, char *argv[]) { - char team[TEAM_MAX]; - char category[CAT_MAX]; - char points_str[5]; - char answer[500]; - long points = 0; - - team[0] = 0; - category[0] = 0; - answer[0] = 0; + char team[TEAM_MAX] = {0}; + char category[CAT_MAX] = {0}; + char points_str[11] = {0}; + char answer[500] = {0}; + long points = 0; if (-1 == cgi_init(argv)) { return 0; @@ -71,9 +66,14 @@ main(int argc, char *argv[]) } } - award_and_log_uniquely(team, category, points, - "puzzler.db", - "%s %s %ld", team, category, points); + { + char line[TEAM_MAX + CAT_MAX + sizeof(points_str) + 2]; + + my_snprintf(line, sizeof(line), + "%s %s %ld", team, category, points); + award_and_log_uniquely(team, category, points, + "puzzler.db", line); + } cgi_page("Points awarded", ("

%d points for %s.

" diff --git a/src/puzzles.cgi.c b/src/puzzles.cgi.c index 3c316e9..2232a1c 100644 --- a/src/puzzles.cgi.c +++ b/src/puzzles.cgi.c @@ -7,6 +7,7 @@ #include #include "common.h" + int longcmp(long *a, long *b) { @@ -15,13 +16,13 @@ longcmp(long *a, long *b) return 0; } -#define PUZZLES_MAX 500 +#define PUZZLES_MAX 100 /** Keeps track of the most points yet awarded in each category */ struct { char cat[CAT_MAX]; long points; -} points_by_cat[100]; +} points_by_cat[PUZZLES_MAX]; int ncats = 0; void @@ -37,14 +38,19 @@ read_points_by_cat() } while (1) { - if (2 != fscanf(f, "%*s %s %ld\n", &cat, &points)) { + /* XXX: tokenize like cgi_item */ + if (2 != fscanf(f, "%*s %s %ld\n", cat, &points)) { break; } for (i = 0; i < ncats; i += 1) { if (0 == strcmp(cat, points_by_cat[i].cat)) break; } if (i == ncats) { - strcpy(points_by_cat[i].cat, cat); + if (PUZZLES_MAX == ncats) { + continue; + } + strncpy(points_by_cat[i].cat, cat, sizeof(points_by_cat[i].cat)); + points_by_cat[i].points = 0; ncats += 1; } if (points > points_by_cat[i].points) { @@ -76,12 +82,14 @@ main(int argc, char *argv[]) /* For each file in /srv/ ... */ while (1) { struct dirent *e = readdir(srv); - char *cat = e->d_name; + char *cat; DIR *puzzles; long catpoints[PUZZLES_MAX]; size_t ncatpoints = 0; if (! e) break; + + cat = e->d_name; if ('.' == cat[0]) continue; /* We have to lstat anyway to see if it's a directory; may as well just barge ahead and watch for errors. */