|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 8210 (0x2012)
Types: TextFile
Names: »miscellany.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦35176feda⟧ »EurOpenD22/isode/isode-6.tar.Z«
└─⟦de7628f85⟧
└─⟦this⟧ »isode-6.0/others/quipu/uips/fred/miscellany.c«
/* miscellany.c - fred miscellaneous functions */
#ifndef lint
static char *rcsid = "$Header: /f/osi/others/quipu/uips/fred/RCS/miscellany.c,v 7.5 90/01/16 21:22:42 mrose Exp $";
#endif
/*
* $Header: /f/osi/others/quipu/uips/fred/RCS/miscellany.c,v 7.5 90/01/16 21:22:42 mrose Exp $
*
*
* $Log: miscellany.c,v $
* Revision 7.5 90/01/16 21:22:42 mrose
* one more time
*
* Revision 7.4 90/01/16 20:43:35 mrose
* last check-out
*
* Revision 7.3 90/01/11 18:36:37 mrose
* real-sync
*
* Revision 7.2 89/12/01 10:45:09 mrose
* touch-up
*
* Revision 7.1 89/11/27 10:32:24 mrose
* sync
*
* Revision 7.0 89/11/23 22:09:01 mrose
* Release 6.0
*
*/
/*
* NOTICE
*
* Acquisition, use, and distribution of this module and related
* materials are subject to the restrictions of a license agreement.
* Consult the Preface in the User's Manual for the full terms of
* this agreement.
*
*/
#include <ctype.h>
#include "fred.h"
/* \f
DATA */
char *myarea = NULL;
struct area_guide areas[] = {
W_ORGANIZATION,
"organization", "-singlelevel", "organization", "o", NULL,
W_UNIT,
"unit", "-subtree", "organizationalUnit", "ou", NULL,
W_LOCALITY,
"locality", "-singlelevel", "locality", "l", NULL,
W_PERSON,
"person", "-subtree", "person", "cn", NULL,
W_DSA,
"dsa", "-singlelevel", "dsa", "cn", NULL,
W_ROLE,
"role", "-subtree", "organizationalRole", "cn", NULL,
NULL
};
/* \f
ALIAS */
/* ARGSUSED */
int f_alias (vec)
char **vec;
{
char *cp,
buffer[BUFSIZ];
if ((cp = *++vec) == NULL)
return dish ("squid -sequence default", 0);
if (strcmp (cp, "-help") == 0) {
fprintf (stdfp, "alias [name]\n");
fprintf (stdfp, " with no arguments, reports on active aliases\n");
fprintf (stdfp,
" with one argument, defines an alias for the given name\n");
return OK;
}
(void) sprintf (buffer, "squid -alias \"%s\"", cp);
return dish (buffer, runcom);
}
/* \f
AREA */
int f_area (vec)
char **vec;
{
int status;
char *cp,
*dp,
buffer[BUFSIZ];
register struct area_guide *ag;
if ((cp = *++vec) == NULL) {
if (myarea == NULL) {
if (dish ("moveto -pwd", 0) == NOTOK)
return NOTOK;
}
else
fprintf (stdfp, " default area %s\n", myarea);
for (ag = areas; ag -> ag_record; ag++)
if (ag -> ag_area)
fprintf (stdfp, "area for record-type %-12.12s %s\n",
ag -> ag_key, ag -> ag_area);
return OK;
}
if (strcmp (cp, "-help") == 0) {
fprintf (stdfp, "area [[record] location]\n");
fprintf (stdfp,
" with no arguments, lists areas current defined for various searches\n");
fprintf (stdfp,
" with one argument, sets the default area for general searches\n");
fprintf (stdfp,
" with two arguments, sets the default area for the given record type\n");
return OK;
}
if ((dp = *++vec) == NULL) {
(void) sprintf (buffer, "moveto -pwd \"%s\"", cp);
if (dish (buffer, 1) == NOTOK) {
advise (NULLCP, "bad area: \"%s\"", cp);
return NOTOK;
}
if (!runcom)
fprintf (stdfp, "%s\n", myarea);
return OK;
}
for (ag = areas; ag -> ag_record; ag++)
if (strcmp (ag -> ag_key, cp) == 0)
break;
if (!ag -> ag_record) {
advise (NULLCP, "invalid record-type: \"%s\"", cp);
return NOTOK;
}
if (cp = myarea)
myarea = NULL;
(void) sprintf (buffer, "moveto -pwd \"%s\"", dp);
if ((status = dish (buffer, 1)) == OK) {
if (ag -> ag_area)
free (ag -> ag_area);
ag -> ag_area = myarea;
if (!runcom)
fprintf (stdfp, "area for record-type %s: %s\n",
ag -> ag_key, ag -> ag_area);
}
else {
advise (NULLCP, "bad area: \"%s\"", dp);
if (myarea)
free (myarea), myarea = NULL;
}
if (myarea = cp) {
(void) sprintf (buffer, "moveto -pwd \"%s\"", myarea);
(void) dish (buffer, 1);
}
return status;
}
/* \f
DISH */
int f_dish (vec)
char **vec;
{
register char *bp,
*cp;
char buffer[BUFSIZ];
if ((cp = *++vec) == NULL)
return dish ("squid", 0);
if (strcmp (cp, "-help") == 0) {
fprintf (stdfp, "dish [command [arguments ...]]\n");
fprintf (stdfp, " with no arguments, reports on status of dish\n");
fprintf (stdfp, " with arguments, passes those directly to dish\n");
return OK;
}
(void) strcpy (bp = buffer, cp);
bp += strlen (bp);
while (cp = *++vec) {
(void) sprintf (bp, " \"%s\"", cp);
bp += strlen (bp);
}
return dish (buffer, runcom);
}
/* \f
EDIT */
int f_edit (vec)
char **vec;
{
int result;
char buffer[BUFSIZ];
if (*++vec != NULL && strcmp (*vec, "-help") == 0) {
fprintf (stdfp, "edit\n");
fprintf (stdfp, " edit entry in the white pages\n");
return OK;
}
if (mydn == NULL) {
advise (NULLCP, "who are you? use the \"thisis\" command first...");
return NOTOK;
}
(void) sprintf (buffer, "modify -dontusecopy -newdraft \"%s\"", mydn);
dontpage = 1;
result = dish (buffer, 0);
dontpage = 0;
if (result != OK)
return result;
(void) sprintf (buffer, "showentry \"%s\" -fred -dontusecopy", mydn);
(void) dish (buffer, 0);
return OK;
}
/* \f
MANUAL */
int f_manual (vec)
char **vec;
{
char buffer[BUFSIZ];
FILE *fp;
if (*++vec != NULL && strcmp (*vec, "-help") == 0) {
fprintf (stdfp, "manual\n");
fprintf (stdfp, " print detailed information\n");
return OK;
}
(void) strcpy (buffer, isodefile ("fred.0", 0));
if (fp = fopen (buffer, "r")) {
while (fgets (buffer, sizeof buffer, fp))
paginate (stdout, buffer, strlen (buffer));
paginate (stdout, NULLCP, 0);
(void) fclose (fp);
}
else
advise (buffer, "unable to open");
return OK;
}
/* \f
REPORT */
int f_report (vec)
char **vec;
{
register char *bp;
char *cp,
buffer[BUFSIZ];
if (*++vec != NULL && strcmp (*vec, "-help") == 0) {
fprintf (stdfp, "report [subject]\n");
fprintf (stdfp, " send report to white pages manager\n");
return OK;
}
bp = buffer;
(void) strcpy (bp, "/usr/ucb/Mail ");
bp += strlen (bp);
if (debug) {
(void) sprintf (bp, "-v ");
bp += strlen (bp);
}
cp = strcmp (manager, "internal") ? manager
: "wpp-camayocs@nisc.nyser.net";
if (readonly) {
(void) sprintf (bp, "-r \"%s\" ", cp);
bp += strlen (bp);
}
(void) sprintf (bp, "-s \"%s\" \"%s\"",
*vec ? *vec : "White Pages report", cp);
bp += strlen (bp);
fprintf (stdfp, "End report with CTRL-D%s\n",
readonly ? ", it will then take 30 seconds to post message" : "");
(void) fflush (stdfp);
if (watch) {
fprintf (stderr, "%s\n", buffer);
(void) fflush (stderr);
}
if (system (buffer))
advise (NULLCP, "problem sending report");
return OK;
}
/* \f
THISIS */
int f_thisis (vec)
char **vec;
{
register char *bp;
char *cp,
buffer[BUFSIZ];
again: ;
if ((cp = *++vec) == NULL) {
if (mydn == NULL) {
advise (NULLCP, "who are you?");
return NOTOK;
}
printf ("you are \"%s\"\n", mydn);
return OK;
}
if (strcmp (cp, "-help") == 0) {
fprintf (stdfp, "thisis [name]\n");
fprintf (stdfp,
" with no arguments, lists your name in the white pages\n");
fprintf (stdfp,
" with one argument, identifies you in the white pages\n");
return OK;
}
if (strcmp (cp, "is") == 0)
goto again;
if (*cp == '!')
cp++;
for (bp = cp; isdigit (*bp); bp++)
continue;
if (*bp && (index (cp, '@') == NULL || index (cp, '=') == NULL)) {
advise (NULLCP,
"expecting a distinguished name (if you don't know what this is, punt)"
);
return NOTOK;
}
bp = buffer;
(void) sprintf (bp, "bind -user \"%s\"", cp);
bp += strlen (bp);
if (*++vec) {
if (runcom && (rcmode & 077))
adios (NULLCP,
"incorrect mode for runcom file -- use \"chmod 0600 $HOME/.fredrc\"");
(void) sprintf (bp, " -password \"%s\"", *vec);
bp += strlen (bp);
}
if (dish (buffer, 0) != OK) {
(void) f_quit (NULLVP);
exit (1); /* NOT REACHED */
}
if (runcom)
didbind = 1;
(void) dish ("squid -user", 1);
return OK;
}