⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usconfig.c

📁 ftam等标准协议服务器和客户端的源代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
    }    if (mkdir (file, DIRPERM) < 0 && errno != EEXIST)      adios (NULLCP, "internal error: cannot create %s",file);/* make sure EDB file doesn't already exist */    strcat (file, "/EDB");    if (access (file, F_OK) == 0) {      sprintf (oldfile, "%s.bak", file);      if (rename (file, oldfile) < 0)        adios (NULLCP, "cannot rename %s to %s", file, oldfile);    }/* now create skeleton organizational unit entries */    sprintf (buf, "sed -f %s %s > \"%s\"", SEDFILE, OUEDBTMPL, file);    if (system (buf) != 0)      adios (NULLCP, "system failed: cannot create %s", file);}/*  *//* build_tailor () -- build tailor files */voidbuild_tailor (){    extern void make_file ();    make_file ("quiputailor", QUIPUTMPL);    make_file (isodefile ("dsaptailor", 0), DSAPTMPL);}/* build_scripts () -- build script files */voidbuild_scripts (){    extern void make_file ();    make_file ("startup.sh", STARTUPTMPL);    make_file ("nightly.sh", NIGHTLYTMPL);}/* build_uifl () -- build user interface configuration files */voidbuild_uifl (){    extern void make_file ();    sprintf (file, "%s/fredrc", isodetcpath);    make_file (file, FREDTMPL);    sprintf (file, "%s/ufnrc", isodetcpath);    make_file (file, UFNTMPL);}/*  *//* create_sedfile () -- create sed file to convert templates */voidcreate_sedfile (){    FILE *sedfp;			/* sed file pointer */    struct pair *pp;			/* to get pair values */    char *orgnm;			/* organization name */    char *town;				/* name of town */    struct state *sp;			/* to save state */    short stnmlen;			/* length of state name */    int i;    extern char *timestamp ();    if ((sedfp = fopen (SEDFILE, "w")) == (FILE *)NULL)      adios (NULLCP, "cannot create sed file %s", SEDFILE);/* put in pairs */    for (i = 0; pairs[i].p_nm != (char *)NULL; ++i)       if (pairs[i].p_val != (char *)NULL)         fprintf (sedfp,"s!@(%s)!%s!g\n", pairs[i].p_nm, pairs[i].p_val);       else         fprintf (sedfp, "s!@(%s)!!g\n", pairs[i].p_nm);/* put in things from isodetailor () */    fprintf (sedfp,"s!@(etcdir)!%s!g\n",isodetcpath);    fprintf (sedfp,"s!@(bindir)!%s!g\n",isodebinpath);    fprintf (sedfp,"s!@(sbindir)!%s!g\n",isodesbinpath);    fprintf (sedfp,"s!@(quipuversion)!%s!g\n",quipuversion);/* get state, in order to find apppropriate regional DSAs */    if ((pp = findpair ("state", 0x00)) == (struct pair *)NULL)      adios (NULLCP, "internal error: cannot get 'state' variable");    stnmlen = strlen (pp->p_val);    for (i = 0; usstates[i].s_nm != (char *)NULL; ++i)       if (stnmlen == strlen (pp->p_val) &&	   strcmp (pp->p_val, usstates[i].s_nm) == 0)         break;    if (usstates[i].s_nm == (char *)NULL)      adios (NULLCP, "state %s not a U.S. state\n", pp->p_val);    else      sp = (usstates +i);/* put in appropriate regional DSA */    fprintf (sedfp,"s!@(parentdsa)!%s!g\n",		regional_dsas[sp->s_region].dsa_name);    fprintf (sedfp,"s!@(parentaddr)!%s!g\n",		regional_dsas[sp->s_region].dsa_addr);/* get organization name */    if ((pp = findpair ("organization", 0x00)) == (struct pair *)NULL)      adios (NULLCP, "internal error: cannot get 'organization' variable");    orgnm = pp->p_val;    if ((pp = findpair ("orgcode", 0x00)) != (struct pair *)NULL ||	chartered_by_congress) {      fprintf (sedfp, "s!@(dnprefix)!%s@o=%s!g\n", USDN, orgnm);    }    else {      fprintf (sedfp, "s!@(dnprefix)!%s@st=%s@o=%s!g\n", USDN, sp->s_nm, orgnm);    }/* put in locality and physicalDeliveryOfficeName */    if ((pp = findpair ("town", 0x00)) == (struct pair *)NULL)      adios (NULLCP, "internal error: cannot get 'town' variable");    fprintf (sedfp,"s!@(locality)!%s, %s!g\n", pp->p_val, sp->s_nm);/* put in timestamp */    fprintf (sedfp, "s!@(timestamp)!%s!g\n", timestamp ());    fclose (sedfp);}/*  *//* make_file () -- create a file from a template */voidmake_file (fl, tmpl)char *fl;				/* file to be created */char *tmpl;				/* template to use */{    if (access (fl, F_OK) == 0)	{	/* file already exists? */      sprintf (oldfile, "%s.old", fl);      if (rename (fl, oldfile) < 0)        adios (NULLCP, "cannot rename %s to %s", fl, oldfile);    }    sprintf (buf, "sed -f %s %s > %s", SEDFILE, tmpl, fl);    if (system (buf) != 0)      adios (NULLCP, "system failed: cannot create %s", fl);}/*  *//* build_mesgfl () -- build file that needs to be sent to wpp-manager */voidbuild_mesgfl (){    FILE *msgfp;			/* pointer to message file */    FILE *fp;				/* pointer to various EDB entries */    struct pair *pp;			/* to get pair values */    char *orgnm;			/* name of organization */    char *statenm;			/* name of state */    unsigned char nationalorg;		/*national organization? nonzero if so*//* open up message file */    if ((msgfp = fopen ("to.wpp-manager", "w")) == (FILE *)NULL)      adios (NULLCP, "cannot create to.wpp-manager message file");/* get name of organization */   if ((pp = findpair ("organization", 0x00)) == (struct pair *)NULL)     adios (NULLCP, "internal error: cannot get 'organization' value");   orgnm = pp->p_val;/* get name of state */    if ((pp = findpair ("state", 0x00)) == (struct pair *)NULL)      adios (NULLCP, "internal error: cannot get 'state' value");    statenm = pp->p_val;/* determine if this is a regional or national organization */    if ((pp = findpair ("orgcode", 0x00)) != (struct pair *)NULL ||	chartered_by_congress) {      nationalorg = 0x7f;		/* a national organization */    }    else      nationalorg = 0x00;		/* a regional organization *//* put organizational EDB into message */    if (nationalorg)       fprintf (msgfp,"--- Addition to %s/EDB ---\n", USDN);    else      fprintf (msgfp,"--- Addition to %s/st=%s/EDB ---\n",		USDN, statenm);    if ((fp = fopen (ORGENTRY, "r")) == (FILE *)NULL)      adios (NULLCP, "cannot open %s", ORGENTRY);    while (fgets (line, BUFSIZ-1, fp) != (char *)NULL)      fprintf (msgfp, "%s", line);    fclose (fp);/* put DSA entry into message */    if ((fp = fopen (DSAENTRY, "r")) == (FILE *)NULL)      adios (NULLCP, "cannot open %s", DSAENTRY);    fprintf (msgfp, "--- Addition to %s/EDB ---\n", USDN);    while (fgets (line, BUFSIZ-1, fp) != (char *)NULL)      fprintf (msgfp, "%s", line);    fclose (fp);    fclose (msgfp);    printf ("Remember to send the to.wpp-manager file off.\n");    printf ("(It may be deleted anytime after it is sent)\n");    unlink (ORGENTRY);    unlink (DSAENTRY);}/*  *//* copy_edb () -- create an EDB, or append to an existing EDB */voidcopy_edb (dir, edbtmpl, append)char *dir;				/* place where EDB should go */char *edbtmpl;				/* location of EDB template */unsigned char append;			/* append, nonzero if so */{    FILE *edbfp;			/* EDB file pointer */    FILE *tmplfp;			/* template file pointer */    bzero (file, BUFSIZ);		/* clear general purpose filename */    bzero (line, BUFSIZ);		/* clear general purpose line */    sprintf(file, "%s/EDB", dir);	/* get path of EDB file */    if (!append) {			/* don't append -- copy *//* rename EDB if it already exists */      if (access (file, F_OK) == 0) {        bzero (oldfile, BUFSIZ);        sprintf (oldfile,"%s.bak", file);        if (rename (file, oldfile) < 0)          adios (NULLCP, "cannot rename %s to %s", file, oldfile);      }    /* open new EDB file */      if ((edbfp = fopen (file, "w")) == (FILE *)NULL)        adios (NULLCP, "cannot open %s", file);    }    else {				/* append *//* open new EDB file */      if ((edbfp = fopen (file, "a")) == (FILE *)NULL)        adios (NULLCP, "cannot open %s", file);    }/* open template file */    if ((tmplfp = fopen (edbtmpl, "r")) == (FILE *)NULL)      adios (NULLCP, "cannot open template file %s", edbtmpl);/* copy in EDB */    while (fgets (line, BUFSIZ-1, tmplfp) != NULL)      fprintf(edbfp, "%s", line);    fclose (tmplfp);    fclose (edbfp);}/*  *//* findpair () -- find 'pair' structure corresponding to name provided */struct pair *findpair (nm, any)char *nm;				/* name of 'pair' to find */char any;				/* 'pair' can have any value? */{    int i;				/* index and counter */    int nmlen;				/* length of name */    nmlen = strlen (nm);		/* get length of name *//* iterate, looking for a name match */    for (i = 0 ; pairs[i].p_nm != (char *)NULL; ++i)       if (nmlen == strlen(pairs[i].p_nm) && strcmp (pairs[i].p_nm,nm) == 0)         if (any || pairs[i].p_val != (char *)NULL)           return (pairs+i);    return ((struct pair *)NULL);}/*  *//* set_permissions () -- set appropriate permissions on database directory */voidset_permissions (){    struct pair *pp;			/* to get pair values */    char *owner, *group;		/* owner and group */    char *wildlife;			/* database directory */    struct passwd *pw;    struct group *grp;    owner = (char *)NULL;    group = (char *)NULL;/* get database directory */    if ((pp = findpair ("wildlife", 0x00)) == (struct pair *)NULL)      adios (NULLCP, "internal error: cannot get 'wildlife' directory");    wildlife = pp->p_val;/* get owner */    if ((pp = findpair ("owner", 0x00)) == (struct pair *)NULL)      if ((pp = findpair ("userid", 0x00)) == (struct pair *)NULL)        if ((pw = getpwuid (geteuid())) == (struct passwd *)NULL)          adios (NULLCP, "Warning: chown not performed -- no account");        else {          advise (NULLCP, "Warning: 'owner' and 'userid' not specified -- using %s", pw->pw_name);          owner = pw->pw_name;        }      else {       if (getpwnam (pp->p_val) == (struct passwd *)NULL)         adios (NULLCP, "Account '%s' is not legal -- cannot be owner", pp->p_val);       owner = pp->p_val;      }    else {     if (getpwnam (pp->p_val) == (struct passwd *)NULL)       adios (NULLCP, "Account '%s' is not legal -- cannot be owner", pp->p_val);      owner = pp->p_val;    }/* get group */    if ((pp = findpair ("groupid", 0x00)) == (struct pair *)NULL) {      if ((grp = getgrgid (getegid ())) == (struct group *)NULL)        adios (NULLCP, "Warning: chown not performed -- no group");      group = grp->gr_name;    }    else {      if (getgrnam (pp->p_val) == (struct group *)NULL)        adios (NULLCP, "Group '%s' not legal -- cannot be group", pp->p_val);      group = pp->p_val;    }    /* do chown */    bzero (buf, BUFSIZ);    chdir ("..");    sprintf (buf, "find %s -exec chown %s.%s {} \\;", wildlife, owner, group);    if (system (buf) != 0)      adios (NULLCP, "cannot perform chown -- system failed");    sprintf (buf, "chmod 755 %s/startup.sh %s/nightly.sh", 		wildlife, wildlife);    if (system (buf) != 0)      adios (NULLCP, "cannot perform chmod -- system failed");}/*  *//* make_usstates () -- generate EDB format entries for the U.S. states */voidmake_usstates (){    int i,j;    char *masterdsa;    for (i = 0; usstates[i].s_nm != (char *)NULL; ++i) {       printf ("st=%s\n",usstates[i].s_nm);       printf ("objectclass= top & locality & quipuObject & quipuNonLeafObject & nadfObject & usStateOrEquivalent\n");       printf ("l= %s & %s\n", usstates[i].s_nm, usstates[i].s_abb);       printf ("st=%s\n",usstates[i].s_nm);       if (usstates[i].s_fips < 60)         printf ("description= The State of %s\n", usstates[i].s_nm);       else	 printf ("description= %s\n", usstates[i].s_nm);       printf ("acl= others # read # default\n");       printf ("acl= others # read # entry\n");       printf ("masterDSA= cn=Alpaca\n");       printf ("slaveDSA= cn=Fruit Bat\n");       printf ("slaveDSA= cn=Giant Anteater\n");       printf ("fipsStateNumericCode= %d\n",usstates[i].s_fips);       printf ("fipsStateAlphaCode= %s\n\n",usstates[i].s_abb);    }					/* end, foreach state */}/*  *//* timestamp () -- return timestamp to use as version on EDB file */char *timestamp (){    long clock;    struct UTCtime ut;    static char timestamp [32];    (void) time (&clock);    tm2ut (gmtime (&clock), &ut);    (void) strcpy (timestamp, gent2str (&ut));    return (timestamp);}/* adios () -- exit with error */#ifndef lintvoidadios (va_alist)va_dcl{    va_list ap;    extern void _advise ();    va_start (ap);    _advise (ap);    va_end (ap);    _exit (1);}#else /* lint */voidadios (what, fmt)char *what, fmt);{    adios (what, fmt);}#endif /* lint *//* advise () -- print out an error message */#ifndef lintvoidadvise (va_alist)va_dcl{    va_list ap;    extern void _advise ();    va_start (ap);    _advise (ap);    va_end (ap);}void_advise (ap)va_list ap;{    char buffer[BUFSIZ];    asprintf (buffer, ap);    (void) fflush (stdout);    fprintf (stderr, "%s: ", prgnm);    (void) fputs (buffer, stderr);    (void) fputc ('\n',stderr);    (void)fflush(stderr);}#else /* lint *//* VARARGS */voidadvise (what, fmt)char *what, *fmt;{    advise (what, fmt);}#endif /* lint */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -