Initial import from FreeBSD RELENG_4:
[dragonfly.git] / crypto / kerberosIV / lib / kadm / kadm.h
1 /*
2  * $Id: kadm.h,v 1.17 1998/10/23 14:25:55 joda Exp $
3  *
4  * Copyright 1988 by the Massachusetts Institute of Technology.
5  *
6  * For copying and distribution information, please see the file
7  * <mit-copyright.h>.
8  *
9  * Definitions for Kerberos administration server & client
10  */
11
12 #ifndef KADM_DEFS
13 #define KADM_DEFS
14
15 /*
16  * kadm.h
17  * Header file for the fourth attempt at an admin server
18  * Doug Church, December 28, 1989, MIT Project Athena
19  */
20
21 #include <krb_db.h>
22
23 /* The global structures for the client and server */
24 typedef struct {
25   struct sockaddr_in admin_addr;
26   struct sockaddr_in my_addr;
27   int my_addr_len;
28   int admin_fd;                 /* file descriptor for link to admin server */
29   char sname[ANAME_SZ];         /* the service name */
30   char sinst[INST_SZ];          /* the services instance */
31   char krbrlm[REALM_SZ];
32 } Kadm_Client;
33
34 typedef struct {                /* status of the server, i.e the parameters */
35    int inter;                   /* Space for command line flags */
36    char *sysfile;               /* filename of server */
37 } admin_params;                 /* Well... it's the admin's parameters */
38
39 /* Largest password length to be supported */
40 #define MAX_KPW_LEN     128
41 /* Minimum allowed password length */
42 #define MIN_KPW_LEN     6
43
44 /* Largest packet the admin server will ever allow itself to return */
45 #define KADM_RET_MAX 2048
46
47 /* That's right, versions are 8 byte strings */
48 #define KADM_VERSTR     "KADM0.0A"
49 #define KADM_ULOSE      "KYOULOSE"      /* sent back when server can't
50                                            decrypt client's msg */
51 #define KADM_VERSIZE strlen(KADM_VERSTR)
52
53 /* the lookups for the server instances */
54 #define PWSERV_NAME  "changepw"
55 #define KADM_SNAME   "kerberos_master"
56 #define KADM_PORT    751
57 #define KADM_SINST   "kerberos"
58
59 /* Attributes fields constants and macros */
60 #define ALLOC        2
61 #define RESERVED     3
62 #define DEALLOC      4
63 #define DEACTIVATED  5
64 #define ACTIVE       6
65
66 /* Kadm_vals structure for passing db fields into the server routines */
67 #define FLDSZ        4
68
69 /* XXX enable new extended kadm fields */
70 #define EXTENDED_KADM 1
71
72 typedef struct {
73     u_int8_t    fields[FLDSZ];     /* The active fields in this struct */
74     char        name[ANAME_SZ];
75     char        instance[INST_SZ];
76     u_int32_t   key_low;
77     u_int32_t   key_high;
78     u_int32_t   exp_date;
79     u_int16_t   attributes;
80     u_int8_t    max_life;
81 #ifdef EXTENDED_KADM
82     u_int32_t   mod_date;
83     char        mod_name[ANAME_SZ];
84     char        mod_instance[INST_SZ];
85     u_int8_t    key_version;
86 #endif
87 } Kadm_vals;                    /* The basic values structure in Kadm */
88
89 /* Need to define fields types here */
90 #define KADM_NAME       31
91 #define KADM_INST       30
92 #define KADM_EXPDATE    29
93 #define KADM_ATTR       28
94 #define KADM_MAXLIFE    27
95 #define KADM_DESKEY     26
96
97 #ifdef EXTENDED_KADM
98 #define KADM_MODDATE    25
99 #define KADM_MODNAME    24
100 #define KADM_MODINST    23
101 #define KADM_KVNO       22
102 #endif
103
104 /* To set a field entry f in a fields structure d */
105 #define SET_FIELD(f,d)  (d[3-(f/8)]|=(1<<(f%8)))
106
107 /* To set a field entry f in a fields structure d */
108 #define CLEAR_FIELD(f,d)  (d[3-(f/8)]&=(~(1<<(f%8))))
109
110 /* Is field f in fields structure d */
111 #define IS_FIELD(f,d)   (d[3-(f/8)]&(1<<(f%8)))
112
113 /* Various return codes */
114 #define KADM_SUCCESS    0
115
116 #define WILDCARD_STR "*"
117
118 enum acl_types {
119 ADDACL,
120 GETACL,
121 MODACL,
122 STABACL, /* not used */
123 DELACL
124 };
125
126 /* Various opcodes for the admin server's functions */
127 #define CHANGE_PW    2
128 #define ADD_ENT      3
129 #define MOD_ENT      4
130 #define GET_ENT      5
131 #define CHECK_PW     6 /* not used */
132 #define CHG_STAB     7 /* not used */
133 #define DEL_ENT      8
134
135 void prin_vals __P((Kadm_vals *));
136 int stv_long __P((u_char *, u_int32_t *, int, int));
137 int vts_long __P((u_int32_t, u_char **, int));
138 int vts_string __P((char *, u_char **, int));
139 int stv_string __P((u_char *, char *, int, int, int));
140
141 int stream_to_vals __P((u_char *, Kadm_vals *, int));
142 int vals_to_stream __P((Kadm_vals *, u_char **));
143
144 int kadm_init_link __P((char *, char *, char *));
145 int kadm_change_pw __P((unsigned char *));
146 int kadm_change_pw_plain __P((unsigned char *, char *, char**));
147 int kadm_change_pw2 __P((unsigned char *, char *, char**));
148 int kadm_mod __P((Kadm_vals *, Kadm_vals *));
149 int kadm_get __P((Kadm_vals *, u_char *));
150 int kadm_add __P((Kadm_vals *));
151 int kadm_del __P((Kadm_vals *));
152 void kadm_vals_to_prin __P((u_char *, Principal *, Kadm_vals *));
153 void kadm_prin_to_vals __P((u_char *, Kadm_vals *, Principal *));
154 int kadm_check_pw __P((const char*));
155
156 #endif /* KADM_DEFS */