openldap/contrib/slapd-modules/nssov/nss-ldapd/nslcd.h

226 lines
8.5 KiB
C

/*
nslcd.h - file describing client/server protocol
Copyright (C) 2006 West Consulting
Copyright (C) 2006, 2007 Arthur de Jong
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA
*/
#ifndef _NSLCD_H
#define _NSLCD_H 1
/*
The protocol used between the nslcd client and server is a simple binary
protocol. It is request/response based where the client initiates a
connection, does a single request and closes the connection again. Any
mangled or not understood messages will be silently ignored by the server.
A request looks like:
int32 NSLCD_VERSION
int32 NSLCD_ACTION_*
[request parameters if any]
A response looks like:
int32 NSLCD_VERSION
int32 NSLCD_ACTION_* (the original request type)
[result(s)]
NSLCD_RESULT_END
A result looks like:
int32 NSLCD_RESULT_SUCCESS
[result value(s)]
If a response would return multiple values (e.g. for NSLCD_ACTION_*_ALL
functions) each return value will be preceded by a NSLCD_RESULT_SUCCESS
value. After the last returned result the server sends
NSLCD_RESULT_END. If some error occurs the server terminates the
connection to signal an error condition (breaking the protocol).
These are the available data types:
INT32 - 32-bit integer value
TYPE - a typed field that is transferred using sizeof()
STRING - a string length (32bit) followed by the string value (not
null-terminted) the string itself is assumed to be UTF-8
STRINGLIST - a 32-bit number noting the number of strings followed by
the strings one at a time
Compound datatypes (such as PASSWD) are defined below as a combination of
the above types. They are defined as macros so they can be expanded to
code later on.
The protocol uses host-byte order for all types (except where the normal
value in-memory is already in network-byte order like with some
addresses). This simple protocol makes it easy to support diffenrent NSS
implementations.
*/
/* used for transferring alias information */
#define NSLCD_ALIAS \
NSLCD_STRING(ALIAS_NAME) \
NSLCD_STRINGLIST(ALIAS_RCPTS)
/* used for transferring mac addresses */
#define NSLCD_ETHER \
NSLCD_STRING(ETHER_NAME) \
NSLCD_TYPE(ETHER_ADDR,uint8_t[6])
/* used for transferring group and membership information */
#define NSLCD_GROUP \
NSLCD_STRING(GROUP_NAME) \
NSLCD_STRING(GROUP_PASSWD) \
NSLCD_TYPE(GROUP_GID,gid_t) \
NSLCD_STRINGLIST(GROUP_MEMBERS)
/* used for storing address information for the host database */
/* Note: this marcos is not expanded to code, check manually */
#define NSLCD_ADDRESS \
NSLCD_INT32(ADDRESS_TYPE) /* type of address: e.g. AF_INET or AF_INET6 */ \
NSLCD_INT32(ADDRESS_LEN) /* length of the address to follow */ \
NSLCD_BUF(ADDRESS_ADDR) /* the address itself in network byte order */
/* used for transferring host (/etc/hosts) information */
/* Note: this marco is not expanded to code, check manually */
#define NSLCD_HOST \
NSLCD_STRING(HOST_NAME) \
NSLCD_STRINGLIST(HOST_ALIASES) \
NSLCD_ADDRESSLIST(HOST_ADDRS)
/* used for transferring netgroup entries one at a time */
/* Note: this marcos is not expanded to code, check manually */
/* netgroup messages are split into two parts, first a part
determining the type */
#define NETGROUP_TYPE_NETGROUP 123
#define NETGROUP_TYPE_TRIPLE 456
#define NSLCD_NETGROUP_TYPE \
NSLCD_INT32(NETGROUP_TYPE) /* one of the above values */
/* followed by one of these message parts */
#define NSLCD_NETGROUP_NETGROUP \
NSLCD_STRING(NETGROUP_NETGROUP)
#define NSLCD_NETGROUP_TRIPLE \
NSLCD_STRING(NETGROUP_HOST) \
NSLCD_STRING(NETGROUP_USER) \
NSLCD_STRING(NETGROUP_DOMAIN)
/* user for transferring network (/etc/networks) information */
/* Note: this marco is not expanded to code, check manually */
#define NSLCD_NETWORK \
NSLCD_STRING(NETWORK_NAME) \
NSLCD_STRINGLIST(NETWORK_ALIASES) \
NSLCD_ADDRESSLIST(NETWORK_ADDRS)
/* used for transferring user (/etc/passwd) information */
#define NSLCD_PASSWD \
NSLCD_STRING(PASSWD_NAME) \
NSLCD_STRING(PASSWD_PASSWD) \
NSLCD_TYPE(PASSWD_UID,uid_t) \
NSLCD_TYPE(PASSWD_GID,gid_t) \
NSLCD_STRING(PASSWD_GECOS) \
NSLCD_STRING(PASSWD_DIR) \
NSLCD_STRING(PASSWD_SHELL)
/* used for transferring protocol information */
#define NSLCD_PROTOCOL \
NSLCD_STRING(PROTOCOL_NAME) \
NSLCD_STRINGLIST(PROTOCOL_ALIASES) \
NSLCD_INT32(PROTOCOL_NUMBER)
/* for transferring struct rpcent structs */
#define NSLCD_RPC \
NSLCD_STRING(RPC_NAME) \
NSLCD_STRINGLIST(RPC_ALIASES) \
NSLCD_INT32(RPC_NUMBER)
/* for transferring struct servent information */
#define NSLCD_SERVICE \
NSLCD_STRING(SERVICE_NAME) \
NSLCD_STRINGLIST(SERVICE_ALIASES) \
NSLCD_INT32(SERVICE_NUMBER) \
NSLCD_STRING(SERVICE_PROTOCOL)
/* used for transferring account (/etc/shadow) information */
#define NSLCD_SHADOW \
NSLCD_STRING(SHADOW_NAME) \
NSLCD_STRING(SHADOW_PASSWD) \
NSLCD_INT32(SHADOW_LASTCHANGE) \
NSLCD_INT32(SHADOW_MINDAYS) \
NSLCD_INT32(SHADOW_MAXDAYS) \
NSLCD_INT32(SHADOW_WARN) \
NSLCD_INT32(SHADOW_INACT) \
NSLCD_INT32(SHADOW_EXPIRE) \
NSLCD_INT32(SHADOW_FLAG)
/* The current version of the protocol. Note that version 1
is experimental and this version will be used until a
1.0 release of nss-ldapd is made. */
#define NSLCD_VERSION 1
/* Request types. */
#define NSLCD_ACTION_ALIAS_BYNAME 4001
#define NSLCD_ACTION_ALIAS_ALL 4002
#define NSLCD_ACTION_ETHER_BYNAME 3001
#define NSLCD_ACTION_ETHER_BYETHER 3002
#define NSLCD_ACTION_ETHER_ALL 3005
#define NSLCD_ACTION_GROUP_BYNAME 5001
#define NSLCD_ACTION_GROUP_BYGID 5002
#define NSLCD_ACTION_GROUP_BYMEMBER 5003
#define NSLCD_ACTION_GROUP_ALL 5004
#define NSLCD_ACTION_HOST_BYNAME 6001
#define NSLCD_ACTION_HOST_BYADDR 6002
#define NSLCD_ACTION_HOST_ALL 6005
#define NSLCD_ACTION_NETGROUP_BYNAME 12001
#define NSLCD_ACTION_NETWORK_BYNAME 8001
#define NSLCD_ACTION_NETWORK_BYADDR 8002
#define NSLCD_ACTION_NETWORK_ALL 8005
#define NSLCD_ACTION_PASSWD_BYNAME 1001
#define NSLCD_ACTION_PASSWD_BYUID 1002
#define NSLCD_ACTION_PASSWD_ALL 1004
#define NSLCD_ACTION_PROTOCOL_BYNAME 9001
#define NSLCD_ACTION_PROTOCOL_BYNUMBER 9002
#define NSLCD_ACTION_PROTOCOL_ALL 9003
#define NSLCD_ACTION_RPC_BYNAME 10001
#define NSLCD_ACTION_RPC_BYNUMBER 10002
#define NSLCD_ACTION_RPC_ALL 10003
#define NSLCD_ACTION_SERVICE_BYNAME 11001
#define NSLCD_ACTION_SERVICE_BYNUMBER 11002
#define NSLCD_ACTION_SERVICE_ALL 11005
#define NSLCD_ACTION_SHADOW_BYNAME 2001
#define NSLCD_ACTION_SHADOW_ALL 2005
#define NSLCD_ACTION_PAM_AUTHC 20001
#define NSLCD_ACTION_PAM_AUTHZ 20002
#define NSLCD_ACTION_PAM_SESS_O 20003
#define NSLCD_ACTION_PAM_SESS_C 20004
#define NSLCD_ACTION_PAM_PWMOD 20005
/* Request result codes. */
#define NSLCD_RESULT_END 3 /* key was not found */
#define NSLCD_RESULT_SUCCESS 0 /* everything ok */
/* Partial list of PAM result codes. */
#define NSLCD_PAM_SUCCESS 0 /* everything ok */
#define NSLCD_PAM_PERM_DENIED 6 /* Permission denied */
#define NSLCD_PAM_AUTH_ERR 7 /* Authc failure */
#define NSLCD_PAM_CRED_INSUFFICIENT 8 /* Cannot access authc data */
#define NSLCD_PAM_AUTHINFO_UNAVAIL 9 /* Cannot retrieve authc info */
#define NSLCD_PAM_USER_UNKNOWN 10 /* User not known */
#define NSLCD_PAM_MAXTRIES 11 /* Retry limit reached */
#define NSLCD_PAM_NEW_AUTHTOK_REQD 12 /* Password expired */
#define NSLCD_PAM_ACCT_EXPIRED 13 /* Account expired */
#define NSLCD_PAM_SESSION_ERR 14 /* Cannot make/remove session record */
#define NSLCD_PAM_AUTHTOK_DISABLE_AGING 23 /* Password aging disabled */
#define NSLCD_PAM_IGNORE 25 /* Ignore module */
#define NSLCD_PAM_ABORT 26 /* Fatal error */
#endif /* not _NSLCD_H */