NAME | SYNOPSIS | DESCRIPTION | NOTES | ATTRIBUTES
#include <arpa/ftpd/systemAuth.h>void systemBeuser(FtpConn * conn);
These routines deal with the credentials attached to a particular connection. As identity is expected to be a global property of the server, there must be some synchronization if several connections with differing credentials are handled simultaneously. The model is the following: Normally, the server's effective uid does not matter. When one thread actually needs a particular uid for a particular operation, a designated lock is taken and the euid is changed. When the operation is completed, the lock is released. If the application is mono-threaded, no lock is necessary. If credentials are irrelevant, these routines do nothing. The systemBeuser function acquires the identity lock and sets the server's identity to that associated with the connection. The systemBesuser function acquires the identity lock and sets the server's identity to that of the superuser. The systemBeany function releases the identity lock. The following is an example of the routines that deal with multiple connections and real credentials. They assume that conn->user_uid and conn->super_user are application-dependent extensions of the FtpConn structure, initialized by systemPass (3FTPD). The user's name can also be used.
static KnMutex credMutex = K_KNMUTEX_INITIALIZER; void systemBeuser(ApplFtpConn* conn) { mutexGet(&credMutex); seteuid(conn->user_uid); } void systemBesuper(ApplFtpConn* conn) { mutexGet(&credMutex); seteuid(conn->super_user); } void systemBeany(ApplFtpConn* conn) { mutexRel(&credMutex); } |
The FTP library only uses systemBesuper and systemBeany , but it is expected that application side routines that open files will use systemBeuser before opening a file, and use systemBeany once the file is open.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | DESCRIPTION | NOTES | ATTRIBUTES