| /* |
| Copyright (c) 2004 The Regents of the University of Michigan. |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions |
| are met: |
| |
| 1. Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| 2. Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| 3. Neither the name of the University nor the names of its |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED |
| WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
| BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #ifndef _RPC_GSSD_H_ |
| #define _RPC_GSSD_H_ |
| |
| #include <sys/types.h> |
| #include <sys/queue.h> |
| #include <gssapi/gssapi.h> |
| |
| #define MAX_FILE_NAMELEN 32 |
| #define FD_ALLOC_BLOCK 256 |
| #ifndef GSSD_PIPEFS_DIR |
| #define GSSD_PIPEFS_DIR "/var/lib/nfs/rpc_pipefs" |
| #endif |
| #define INFO "info" |
| #define KRB5 "krb5" |
| #define DNOTIFY_SIGNAL (SIGRTMIN + 3) |
| |
| #define GSSD_DEFAULT_CRED_DIR "/tmp" |
| #define GSSD_DEFAULT_CRED_PREFIX "krb5cc_" |
| #define GSSD_DEFAULT_MACHINE_CRED_SUFFIX "machine" |
| #define GSSD_DEFAULT_KEYTAB_FILE "/etc/krb5.keytab" |
| #define GSSD_SERVICE_NAME "nfs" |
| #define GSSD_SERVICE_NAME_LEN 3 |
| #define GSSD_MAX_CCACHE_SEARCH 16 |
| |
| /* |
| * The gss mechanisms that we can handle |
| */ |
| enum {AUTHTYPE_KRB5, AUTHTYPE_SPKM3, AUTHTYPE_LIPKEY}; |
| |
| |
| |
| extern char pipefs_dir[PATH_MAX]; |
| extern char keytabfile[PATH_MAX]; |
| extern char *ccachesearch[]; |
| extern int use_memcache; |
| extern int root_uses_machine_creds; |
| extern unsigned int context_timeout; |
| extern char *preferred_realm; |
| |
| TAILQ_HEAD(clnt_list_head, clnt_info) clnt_list; |
| |
| struct clnt_info { |
| TAILQ_ENTRY(clnt_info) list; |
| char *dirname; |
| int dir_fd; |
| char *servicename; |
| char *servername; |
| int prog; |
| int vers; |
| char *protocol; |
| int krb5_fd; |
| int krb5_poll_index; |
| int spkm3_fd; |
| int spkm3_poll_index; |
| int gssd_fd; |
| int gssd_poll_index; |
| struct sockaddr_storage addr; |
| }; |
| |
| TAILQ_HEAD(topdirs_list_head, topdirs_info) topdirs_list; |
| |
| struct topdirs_info { |
| TAILQ_ENTRY(topdirs_info) list; |
| char *dirname; |
| int fd; |
| }; |
| |
| void init_client_list(void); |
| int update_client_list(void); |
| void handle_krb5_upcall(struct clnt_info *clp); |
| void handle_spkm3_upcall(struct clnt_info *clp); |
| void handle_gssd_upcall(struct clnt_info *clp); |
| int gssd_acquire_cred(char *server_name); |
| void gssd_run(void); |
| |
| |
| #endif /* _RPC_GSSD_H_ */ |