Annotation of 43BSDTahoe/new/nntp/server/ahbs.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char    *sccsid = "@(#)ahbs.c   1.7     (Berkeley) 7/17/87";
                      3: #endif
                      4: 
                      5: #include "common.h"
                      6: 
                      7: static char    *verbage[] = {
                      8:        "head and body follow",
                      9:        "head follows",
                     10:        "body follows",
                     11:        "request text separately"
                     12: };
                     13: 
                     14: /*
                     15:  * {ARTICLE,HEAD,BODY,STAT} <messageid>|articlenum
                     16:  *
                     17:  * Retrieve article, head, body, or stat, depending on the
                     18:  * command we were invoked with.
                     19:  */
                     20: 
                     21: ahbs(argc, argv)
                     22:        int             argc;
                     23:        char            *argv[];
                     24: {
                     25:        char            artbuf[MAX_STRLEN], art_id[MAX_STRLEN];
                     26:        register char   c;
                     27:        int             method;
                     28:        register FILE   *fp;            /* For Message-ID retrieval only */
                     29: 
                     30:        if (argc > 2) {
                     31:                printf("%d Usage: %s <message-id>|article_number.\r\n", argv[0],
                     32:                        ERR_CMDSYN);
                     33:                (void) fflush(stdout);
                     34:                return;
                     35:        }
                     36: 
                     37:        if ((c = *argv[0]) == 'a' || c == 'A')
                     38:                method = ARTICLE;
                     39:        else if ((c == 's' || c == 'S'))
                     40:                method = STAT;
                     41:        else
                     42:                method = ((c == 'h' || c == 'H') ? HEAD : BODY);
                     43: 
                     44:        if (argc == 2 && *argv[1] == '<') {     /* Message ID */
                     45:                fp = openartbyid(argv[1]);
                     46:                if (fp == NULL) {
                     47:                        printf("%d No article by message-id %s, sorry.\r\n",
                     48:                                ERR_NOART, argv[1]);
                     49:                        (void) fflush(stdout);
                     50:                        return;
                     51:                }
                     52:                if (check_ngperm(fp) == 0) {
                     53:                        printf("%d Can't give that to you, sorry.\r\n",
                     54:                                ERR_ACCESS);
                     55:                        (void) fflush(stdout);
                     56:                        (void) fclose(fp);
                     57:                        return;
                     58:                }
                     59:                printf("%d 0 %s Article retrieved, %s.\r\n",
                     60:                        OK_ARTICLE + method, argv[1], verbage[method]);
                     61:                spew(fp, method);
                     62:                (void) fclose(fp);
                     63: #ifdef LOG
                     64:                if (nn_told)
                     65:                        nn_took++;
                     66: #endif
                     67:                return;
                     68:        }
                     69: 
                     70:        /* Else we're trying to read */
                     71: 
                     72:        if (!canread) {
                     73:                printf("%d You only have permission to transfer, sorry.\r\n",
                     74:                        ERR_ACCESS);
                     75:                (void) fflush(stdout);
                     76:                return;
                     77:        }
                     78: 
                     79:        if (!ingroup) {
                     80:                printf("%d You are not currently in a newsgroup.\r\n",
                     81:                        ERR_NCING);
                     82:                (void) fflush(stdout);
                     83:                return;
                     84:        }
                     85: 
                     86:        if (argc == 1) {
                     87:                if (art_ptr < 0 || art_ptr >= num_arts) {
                     88:                        printf("%d No article is currently selected.\r\n",
                     89:                                ERR_NOCRNT);
                     90:                        (void) fflush(stdout);
                     91:                        return;
                     92:                }
                     93:                (void) sprintf(artbuf, "%d", art_array[art_ptr]);
                     94:        } else
                     95:                (void) strcpy(artbuf, argv[1]);
                     96: 
                     97:        if (!valid_art(artbuf)) {
                     98:                printf("%d Invalid article number: %s.\r\n",
                     99:                        ERR_NOARTIG, artbuf);
                    100:                (void) fflush(stdout);
                    101:                return;
                    102:        }
                    103: 
                    104:        while (open_valid_art(artbuf, art_id) == NULL) {
                    105:                if (argc > 1) {
                    106:                        printf("%d Invalid article number: %s.\r\n",
                    107:                                ERR_NOARTIG, artbuf);
                    108:                        (void) fflush(stdout);
                    109:                        return;
                    110:                } else {
                    111:                        if (++art_ptr >= num_arts) {
                    112:                                printf("%d Invalid article number.\r\n",
                    113:                                        ERR_NOARTIG);
                    114:                                (void) fflush(stdout);
                    115:                                return;
                    116:                        }
                    117:                        (void) sprintf(artbuf, "%d", art_array[art_ptr]);
                    118:                }
                    119:        }
                    120: 
                    121:        printf("%d %s %s Article retrieved; %s.\r\n",
                    122:                OK_ARTICLE + method, artbuf, art_id, verbage[method]);
                    123: 
                    124:        spew(art_fp, method);
                    125: 
                    126:        if (argc > 1)
                    127:                art_ptr = findart(artbuf);
                    128: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.