/*****************************************************************************\
* 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: user.h 1251 2005-03-06 22:24:29Z morth $ */

#ifndef _USER_H
#define _USER_H

typedef struct user user_t;

#include "server.h"
#include "connection.h"
#include "utf8fs/file.h"

enum
{
  ufPassword       = 1 << 0,
  ufHome           = 1 << 1,
  ufUid            = 1 << 2,
  ufGid            = 1 << 3,
  ufAnonymous      = 1 << 4,
  ufChroot         = 1 << 5
};

enum
{
  admList          = 1 << 0,
  admMsg           = 1 << 1,
  admAbort         = 1 << 2,
  admDisconnect    = 1 << 3,
  admReload        = 1 << 4
};

struct user
{
  int spec_flags;
  
  char *name, *password, *home;
  uid_t uid;
  gid_t gid;
  unsigned int allowLogin:1, anonymous:1, passwordNeeded:1, allowSecLogin:1, defHardLink:1,
    allowForeign:1, allowOutOfRange:1;
  char *chroot, *dirMsgFile;
  access_t *access;
  char *access_program, *external_login;
  int maxIdle;
  int ngroups;
  gid_t groups[NGROUPS_MAX];
  int maxLogins;
#ifdef USE_SQL
  char *sqlDirQuery;
#endif
  int adminPrivs;
  
  user_t *next;
};

user_t *new_user(const char *name, void *parent);
user_t *copy_user(const user_t *u, const char *newname, void *newparent);

user_t *find_user (connection_t *conn, const char *name, int allowNoLogin, void *newparent);
user_t *find_passwd_user(const char *name, void *newparent);
user_t *find_server_user(const server_t *server, const char *name, void *newparent);

const char *user_pass(const user_t *user);

void user_setup_environ(user_t *user, int authed, int rFd, int wFd);

#endif /*_USER_H*/


syntax highlighted by Code2HTML, v. 0.9.1