|
|
1.1 ! root 1: #include "parms.h" ! 2: #include "structs.h" ! 3: ! 4: #ifdef RCSIDENT ! 5: static char rcsid[] = "$Header: dump.c,v 1.7.0.1 85/10/09 18:11:12 notes Rel $"; ! 6: #endif RCSIDENT ! 7: ! 8: /* ! 9: * dumpnf(nfname) ! 10: * ! 11: * Dump a notesfile. Parameters are a notesfile name, a name ! 12: * for the descriptor information, and a name for the rest ! 13: * of the notesfile. ! 14: * ! 15: */ ! 16: ! 17: dumpnf (nfname, dfile) ! 18: char *nfname; /* name of notesfile */ ! 19: char *dfile; /* descriptor */ ! 20: { ! 21: struct io_f io; ! 22: struct note_f note; ! 23: FILE * dout; ! 24: int i; ! 25: ! 26: if ((i = init (&io, nfname)) < 0) ! 27: { ! 28: fprintf (stderr, "Problems opening notesfile %s\n", nfname); ! 29: return (i); /* die */ ! 30: } ! 31: if (!allow (&io, READOK)) /* no read access! */ ! 32: { ! 33: fprintf (stderr, "You aren't allowed to read %s\n", nfname); ! 34: closenf (&io); ! 35: return (-1); ! 36: } ! 37: if (!strcmp (dfile, "-")) /* use stdout */ ! 38: dout = stdout; ! 39: else ! 40: if ((dout = fopen (dfile, "w")) == NULL) /* a real file */ ! 41: { ! 42: closenf (&io); /* die */ ! 43: return (-1); ! 44: } ! 45: ! 46: dmpdescr (&io, dout); /* dump descriptor */ ! 47: dmpaccess (&io, dout); /* access list out */ ! 48: for (i = 1; i <= io.descr.d_nnote; i++) /* dump each note */ ! 49: { ! 50: getnrec (&io, i, ¬e); /* get record */ ! 51: if (note.n_stat & DELETED) ! 52: continue; /* ignore */ ! 53: dmpnote (&io, ¬e, i, dout, DETAIL, 0); /* base note */ ! 54: dmprall (&io, ¬e, i, dout, DETAIL, 0); /* and responses */ ! 55: } ! 56: ! 57: fclose (dout); /* close descriptor */ ! 58: closenf (&io); /* and notesfile */ ! 59: return (0); /* return nicely */ ! 60: } ! 61: ! 62: ! 63: /* ! 64: * dmpdescr ! 65: * ! 66: * Dump a notesfile descriptor and it's policy note if there is ! 67: * one. Send it to the supplied stdio file. ! 68: * ! 69: */ ! 70: ! 71: dmpdescr (io, dmpfile) ! 72: struct io_f *io; ! 73: FILE * dmpfile; ! 74: { ! 75: char buf[128]; /* hold strings */ ! 76: register int i; ! 77: ! 78: getdscr (io, &io -> descr); /* grab descriptor */ ! 79: fprintf (dmpfile, "NF-Title: %s\n", io -> descr.d_title); ! 80: fprintf (dmpfile, "NF-Director-Message: %s\n", io -> descr.d_drmes); ! 81: sprdate (&io -> descr.d_lastm, buf); ! 82: fprintf (dmpfile, "NF-Last-Modified: %s\n", buf); ! 83: fprintf (dmpfile, "NF-Status:"); /* status */ ! 84: { ! 85: if (io -> descr.d_stat & ANONOK) ! 86: fprintf (dmpfile, " Anonymous"); ! 87: if (io -> descr.d_stat & OPEN) ! 88: fprintf (dmpfile, " Open"); ! 89: if (io -> descr.d_stat & NETWRKD) ! 90: fprintf (dmpfile, " Networked"); ! 91: if (io -> descr.d_stat & ISARCH) ! 92: fprintf (dmpfile, " Archive"); ! 93: } ! 94: putc ('\n', dmpfile); /* end status line */ ! 95: fprintf (dmpfile, "NF-Id-Sequence: %ld@%s\n", ! 96: io -> descr.d_id.uniqid, io -> descr.d_id.sys); ! 97: fprintf (dmpfile, "NF-Number: %ld\n", (long) io -> descr.d_nfnum); ! 98: sprdate (&io -> descr.d_lstxmit, buf); ! 99: fprintf (dmpfile, "NF-Last-Transmit: %s\n", buf); ! 100: sprdate (&io -> descr.d_created, buf); ! 101: fprintf (dmpfile, "NF-Created: %s\n", buf); ! 102: sprdate (&io -> descr.d_lastuse, buf); ! 103: fprintf (dmpfile, "NF-Last-Used: %s\n", buf); ! 104: fprintf (dmpfile, "NF-Days-Used: %ld\n", io -> descr.d_daysused); ! 105: fprintf (dmpfile, "NF-Notes-Written: %ld\n", io -> descr.d_notwrit); ! 106: fprintf (dmpfile, "NF-Notes-Read: %ld\n", io -> descr.d_notread); ! 107: fprintf (dmpfile, "NF-Notes-Transmitted: %ld\n", io -> descr.d_notxmit); ! 108: fprintf (dmpfile, "NF-Notes-Received: %ld\n", io -> descr.d_notrcvd); ! 109: fprintf (dmpfile, "NF-Notes-Dropped: %ld\n", io -> descr.d_notdrop); ! 110: fprintf (dmpfile, "NF-Responses-Written: %ld\n", io -> descr.d_rspwrit); ! 111: fprintf (dmpfile, "NF-Responses-Read: %ld\n", io -> descr.d_rspread); ! 112: fprintf (dmpfile, "NF-Responses-Transmitted: %ld\n", ! 113: io -> descr.d_rspxmit); ! 114: fprintf (dmpfile, "NF-Responses-Received: %ld\n", io -> descr.d_rsprcvd); ! 115: fprintf (dmpfile, "NF-Responses-Dropped: %ld\n", io -> descr.d_rspdrop); ! 116: fprintf (dmpfile, "NF-Entries: %ld\n", io -> descr.entries); ! 117: fprintf (dmpfile, "NF-Walltime: %ld seconds\n", ! 118: io -> descr.walltime); ! 119: fprintf (dmpfile, "NF-Orphans-Received: %ld\n", io -> descr.d_orphans); ! 120: fprintf (dmpfile, "NF-Orphans-Adopted: %ld\n", io -> descr.d_adopted); ! 121: fprintf (dmpfile, "NF-Transmits: %ld\n", io -> descr.netwrkouts); ! 122: fprintf (dmpfile, "NF-Receives: %ld\n", io -> descr.netwrkins); ! 123: fprintf (dmpfile, "NF-Expiration-Age: %ld Days\n", io -> descr.d_archtime); ! 124: switch ((int) io -> descr.d_archkeep) ! 125: { ! 126: case KEEPYES: ! 127: strcpy (buf, "Archive"); ! 128: break; ! 129: case KEEPNO: ! 130: strcpy (buf, "Delete"); ! 131: break; ! 132: default: ! 133: strcpy (buf, "Default"); ! 134: break; ! 135: } ! 136: fprintf (dmpfile, "NF-Expiration-Action: %s\n", buf); ! 137: switch ((int) io -> descr.d_dmesgstat) ! 138: { ! 139: case DIRON: ! 140: strcpy (buf, "On"); ! 141: break; ! 142: case DIROFF: ! 143: strcpy (buf, "Off"); ! 144: break; ! 145: case DIRNOCARE: ! 146: strcpy (buf, "Either"); ! 147: break; ! 148: default: ! 149: strcpy (buf, "Default"); ! 150: break; ! 151: } ! 152: fprintf (dmpfile, "NF-Expiration-Status: %s\n", buf); ! 153: fprintf (dmpfile, "NF-Working-Set-Size: %ld\n", io -> descr.d_workset); ! 154: fprintf (dmpfile, "NF-Longest-Text: %ld bytes\n", io -> descr.d_longnote); ! 155: ! 156: fprintf (dmpfile, "NF-Policy-Exists: %s\n", ! 157: io -> descr.d_plcy ? "Yes" : "No"); ! 158: fprintf (dmpfile, "NF-Descriptor: Finished\n"); /* mark as done */ ! 159: /* ! 160: * dump the policy note if there is one ! 161: */ ! 162: if (io -> descr.d_plcy) /* if a policy note */ ! 163: { /* dump it */ ! 164: struct note_f note; ! 165: getnrec (io, 0, ¬e); ! 166: dmpnote (io, ¬e, 0, dmpfile, DETAIL, 0); /* dump it */ ! 167: } ! 168: } ! 169: ! 170: /* ! 171: * dmpaccess(&io) ! 172: * ! 173: * dump the access list. ! 174: * short circuited for now. ! 175: */ ! 176: ! 177: dmpaccess (io, dfile) ! 178: struct io_f *io; ! 179: FILE * dfile; ! 180: { ! 181: struct perm_f perms[NPERMS]; /* access rights */ ! 182: int nperms; /* and how many */ ! 183: char pathname[WDLEN]; ! 184: char *atype; ! 185: char mode[32]; /* at most 5 */ ! 186: int i; ! 187: FILE * afile; ! 188: ! 189: sprintf (pathname, "%s/%s/%s", io -> basedir, io -> nf, ACCESS); ! 190: x ((afile = fopen (pathname, "r")) == NULL, "dmpaccess: no access list"); ! 191: x ((nperms = fread (perms, sizeof (struct perm_f), NPERMS, afile)) == 0, ! 192: "dmpaccess: empty access list"); ! 193: fclose (afile); /* all done */ ! 194: for (i = 0; i < nperms; i++) ! 195: { ! 196: switch (perms[i].ptype) ! 197: { ! 198: case PERMUSER: ! 199: atype = "User"; ! 200: break; ! 201: case PERMGROUP: ! 202: atype = "Group"; ! 203: break; ! 204: case PERMSYSTEM: ! 205: atype = "System"; ! 206: break; ! 207: default: ! 208: atype = "Bizarro"; ! 209: break; ! 210: } ! 211: strcpy (mode, ""); /* build it up */ ! 212: if (perms[i].perms & DRCTOK) /* director */ ! 213: strcat (mode, "d"); ! 214: if (perms[i].perms & READOK) /* read */ ! 215: strcat (mode, "r"); ! 216: if (perms[i].perms & WRITOK) /* write */ ! 217: strcat (mode, "w"); ! 218: if (perms[i].perms & RESPOK) /* respond */ ! 219: strcat (mode, "a"); ! 220: fprintf (dfile, "Access-Right: %s:%s=%s\n", ! 221: atype, perms[i].name, mode); ! 222: } ! 223: fprintf (dfile, "NF-Access-Finished:\n"); ! 224: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.