/*****************************************************************************\
* Copyright (c) 2002 Pelle Johansson.                                         *
* All rights reserved.                                                        *
*                                                                             *
* This file is part of the moftpd package. Use and distribution of            *
* this software is governed by the terms in the file LICENCE, which           *
* should have come with this package.                                         *
\*****************************************************************************/

/* $moftpd: server.h 1223 2004-10-28 16:14:40Z morth $ */

#ifndef _SERVER_H
#define _SERVER_H

typedef struct server server_t;

#include "user.h"
#include "utf8fs/file.h"
#include "sql.h"
#include "tls.h"

struct sockaddr;

struct server
{
  char *name;
  int numBindings;
  char **bindings;
  int numPorts;
  int *ports;
  int minPasvPort, maxPasvPort;
  user_t *users;
  access_t *access;
  char *chroot;
  char *loginFailedMsg, *userInvalidMsg;
  int maxIdle;
  char *passRequestMsg, *anonPassMsg, *dirMsgFile, *welcomeMsg;
  int tlsOptions;
#ifdef USE_TLS
  tlscert_t tlsCert;
  tlskey_t tlsKey;
#endif
  int sleepOnFail, maxLoginAttempts;
#ifdef HAVE_LIBPAM
  char *pam_service;
#endif
  int maxConnects;
#ifdef USE_SQL
  sql_t sql;
  char *sqlHost, *sqlUser, *sqlDB, *sqlPass, *sqlCert, *sqlKey;
  char *sqlUserQuery, *sqlDirQuery, *sqlConnectQuery;
  int sqlRefs;
#endif
  
  unsigned int passIfInvalid:1, allowUnbound:1, allowForeign:1, allowLowPorts:1,
    allowLogin:1, passwordNeeded:1, loginTLS:1, tlsNoLogout:1,
    allowSecLogin:1, defHardLink:1, allowOutOfRange:1;
  
  struct
  {
    char *alias;
    char *user;
  } *aliases;
  int numAliases;
  
  struct
  {
    struct sockaddr_storage addr, mask;
    int maskSize;
  } *ranges;
  int numRanges;
};

server_t *new_server(const char *name, server_t *parent);
void quit_all_servers (void);
void close_server_sockets (void);

void add_server_port(server_t *serv, int port);
void add_server_binding(server_t *serv, const char *mask);
void add_server_range (server_t *serv, struct sockaddr *addr, struct sockaddr *mask);

void server_add_alias(server_t *serv, const char *alias, const char *user);
const char *server_expand_alias(const server_t *serv, const char *name);

server_t *find_server (const struct sockaddr *addr, const struct sockaddr *raddr, const server_t *last);
server_t *find_named_server (const char *host, int port, const struct sockaddr *raddr, const server_t *last);

int create_server_sockets(void);
int connection_accepter(int sock, void *user, int urgent);

#endif /*_SERVER_H*/


syntax highlighted by Code2HTML, v. 0.9.1