ftprestart.c revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* Copyright 2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/****************************************************************************
Copyright (c) 1999,2000 WU-FTPD Development Group.
All rights reserved.
Portions Copyright (c) 1980, 1985, 1988, 1989, 1990, 1991, 1993, 1994
The Regents of the University of California.
Portions Copyright (c) 1993, 1994 Washington University in Saint Louis.
Portions Copyright (c) 1996, 1998 Berkeley Software Design, Inc.
Portions Copyright (c) 1989 Massachusetts Institute of Technology.
Portions Copyright (c) 1998 Sendmail, Inc.
Portions Copyright (c) 1983, 1995, 1996, 1997 Eric P. Allman.
Portions Copyright (c) 1997 by Stan Barber.
Portions Copyright (c) 1997 by Kent Landfield.
Portions Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997
Free Software Foundation, Inc.
Use and distribution of this software and its source code are governed
by the terms and conditions of the WU-FTPD Software License ("LICENSE").
If you did not receive a copy of the license, it may be obtained online
$Id: ftprestart.c,v 1.7 2000/07/01 18:17:39 wuftpd Exp $
****************************************************************************/
/* ftprestart
**
** removes the ftpd shutdown files.
**
** In the previous versions of the wu-ftpd server it was recommended to
** create a link in order for shutdown to work properly for real and
** anonymous user, e.g. If you use ftpshut, it will create a message
** file at the location specified in the ftpaccess shutdown directive.
**
** When ftp service is to be restarted after an ftpshut, the shutdown
** message files must be removed. This program reads the ftpaccess
** file and finds the location of the system shutdown file. It
** then proceeds to construct a path to the anonymous ftp area with
** information found in the "ftp" account. If virtual ftp servers
** are enabled, the shutdown message files within those directories
** are also removed.
**
** Initial Author: Kent Landfield
*/
#include "config.h"
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <pwd.h>
#endif
#include "pathnames.h"
#define MAXVIRTUALS 512
char *progname;
char *msgfiles[MAXVIRTUALS];
int numfiles = 0;
#ifdef VIRTUAL
#endif
void print_copyright(void);
{
int i;
int fnd;
/*
** Check to see if the message file path has already been
** seen. If so then there is no need to create it again.
*/
fnd = 0;
for (i = 0; i < numfiles; i++) {
fnd = 1;
break;
}
}
if (!fnd) {
return (1);
}
return (0);
}
static int remove_shutdown_file(char *path)
{
else
}
else
return (rc);
}
{
int c;
char *p;
char shutmsg[256];
char anonpath[MAXPATHLEN];
#if defined(VIRTUAL)
char *sp;
#ifdef INET6
char hostaddress[INET6_ADDRSTRLEN];
#else
char hostaddress[32];
#endif
char root[MAXPATHLEN];
char configdir[MAXPATHLEN];
char accesspath[MAXPATHLEN];
char altmsgpath[MAXPATHLEN];
#endif
++progname;
else
if (argc > 1) {
switch (c) {
case 'V':
exit(0);
default:
exit(1);
}
}
}
exit(1);
}
/*
** Search the access file for the 'shutdown' directive.
*/
*p = '\0';
}
}
exit(1);
}
/*
** Get the location of the anonymous ftp area and check
** to see if there is a file shutdown file there as well.
** If so, remove it.
*/
shutmsg);
(void) remove_shutdown_file(anonpath);
}
#ifdef VIRTUAL
/*
** Search the access file for virtual ftp servers.
** message files files in the virtual server areas.
** If so, remove them.
*/
p += 4;
*cp = '\0';
/* skip to the path */
while (*p && isspace(*p))
p++;
cp = p;
while (*p && isalnum(*p))
p++;
shutmsg);
if (newfile(altmsgpath))
(void) remove_shutdown_file(altmsgpath);
}
}
}
/*
** Need to deal with the access files at the virtual domain directory
** locations specified in the ftpservers file.
*/
/* get rid of any trailing slash */
if (*sp == '/')
*sp = '\0';
/*
** check to see that a valid directory value was
** supplied and not something such as "INTERNAL"
**
** It is valid to have a string such as "INTERNAL" in the
** ftpservers entry. This is not an error. Silently ignore it.
*/
continue;
(void) fclose(accessfile);
continue;
}
}
/* need to find the root path */
sp++;
sp++;
break;
}
}
/* need to find the shutdown message file path */
sp++;
sp++;
break;
}
}
/*
** check to make sure the admin hasn't specified
** a complete path in the 'shutdown' directive.
*/
cp);
if (newfile(altmsgpath))
(void) remove_shutdown_file(altmsgpath);
}
}
#endif /* VIRTUAL */
/*
** Time to remove the system wide shutdown file.
*/
return (remove_shutdown_file(shutmsg));
}