Imported Upstream version 1.8.7
[debian/sudo] / plugins / sudoers / parse.h
index 3f7c451aeb41e857a9b09c3cca6949a4cb391e2e..a892e97b38ac8512a18e6aca76f0ac0648859ef2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 1998-2000, 2004, 2007-2011
+ * Copyright (c) 1996, 1998-2000, 2004, 2007-2013
  *     Todd C. Miller <Todd.Miller@courtesan.com>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -15,8 +15,8 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#ifndef _SUDO_PARSE_H
-#define _SUDO_PARSE_H
+#ifndef _SUDOERS_PARSE_H
+#define _SUDOERS_PARSE_H
 
 #undef UNSPEC
 #define UNSPEC -1
 #undef IMPLIED
 #define IMPLIED         2
 
+#define SUDO_DIGEST_SHA224     0
+#define SUDO_DIGEST_SHA256     1
+#define SUDO_DIGEST_SHA384     2
+#define SUDO_DIGEST_SHA512     3
+#define SUDO_DIGEST_INVALID    4
+
+struct sudo_digest {
+    int digest_type;
+    char *digest_str;
+};
+
 /*
- * A command with args. XXX - merge into struct member.
+ * A command with option args and digest.
+ * XXX - merge into struct member
  */
 struct sudo_command {
     char *cmnd;
     char *args;
+    struct sudo_digest *digest;
 };
 
 /*
  * Tags associated with a command.
- * Possible values: true, false, UNSPEC.
+ * Possible values: true, false, IMPLIED, UNSPEC.
  */
 struct cmndtag {
     __signed int nopasswd: 3;
@@ -117,6 +130,7 @@ struct cmndspec {
     struct member_list runasuserlist;  /* list of runas users */
     struct member_list runasgrouplist; /* list of runas groups */
     struct member *cmnd;               /* command to allow/deny */
+    char *digest;                      /* optional command digest */
     struct cmndtag tags;               /* tag specificaion */
 #ifdef HAVE_SELINUX
     char *role, *type;                 /* SELinux role and type */
@@ -148,7 +162,7 @@ struct runascontainer {
 struct alias {
     char *name;                                /* alias name */
     unsigned short type;               /* {USER,HOST,RUNAS,CMND}ALIAS */
-    unsigned short seqno;              /* sequence number */
+    bool used;                         /* "used" flag for cycle detection */
     struct member_list members;                /* list of alias members */
 };
 
@@ -170,35 +184,43 @@ struct defaults {
 extern struct userspec_list userspecs;
 extern struct defaults_list defaults;
 
-/*
- * Alias sequence number to avoid loops.
- */
-extern unsigned int alias_seqno;
-
-/*
- * Prototypes
- */
-char *alias_add(char *, int, struct member *);
-bool addr_matches(char *);
-int cmnd_matches(struct member *);
-int cmndlist_matches(struct member_list *);
-bool command_matches(char *, char *);
-int hostlist_matches(struct member_list *);
-bool hostname_matches(char *, char *, char *);
-bool netgr_matches(char *, char *, char *, char *);
+/* alias.c */
 bool no_aliases(void);
-int runaslist_matches(struct member_list *, struct member_list *, struct member **, struct member **);
-int userlist_matches(struct passwd *, struct member_list *);
-bool usergr_matches(char *, char *, struct passwd *);
-bool userpw_matches(char *, char *, struct passwd *);
-bool group_matches(char *, struct group *);
-struct alias *alias_find(char *, int);
-struct alias *alias_remove(char *, int);
-void alias_free(void *);
-void alias_apply(int (*)(void *, void *), void *);
+char *alias_add(char *name, int type, struct member *members);
+int alias_compare(const void *a1, const void *a2);
+struct alias *alias_get(char *name, int type);
+struct alias *alias_remove(char *name, int type);
+void alias_apply(int (*func)(void *, void *), void *cookie);
+void alias_free(void *a);
+void alias_put(struct alias *a);
 void init_aliases(void);
-void init_lexer(void);
+
+/* gram.c */
 void init_parser(const char *, bool);
-int alias_compare(const void *, const void *);
 
-#endif /* _SUDO_PARSE_H */
+/* match_addr.c */
+bool addr_matches(char *n);
+
+/* match.c */
+bool command_matches(char *sudoers_cmnd, char *sudoers_args, struct sudo_digest *digest);
+bool group_matches(char *sudoers_group, struct group *gr);
+bool hostname_matches(char *shost, char *lhost, char *pattern);
+bool netgr_matches(char *netgr, char *lhost, char *shost, char *user);
+bool usergr_matches(char *group, char *user, struct passwd *pw);
+bool userpw_matches(char *sudoers_user, char *user, struct passwd *pw);
+int cmnd_matches(struct member *m);
+int cmndlist_matches(struct member_list *list);
+int hostlist_matches(struct member_list *list);
+int runaslist_matches(struct member_list *user_list, struct member_list *group_list, struct member **matching_user, struct member **matching_group);
+int userlist_matches(struct passwd *pw, struct member_list *list);
+
+/* toke.c */
+void init_lexer(void);
+
+/* hexchar.c */
+int hexchar(const char *s);
+
+/* base64.c */
+size_t base64_decode(const char *str, unsigned char *dst, size_t dsize);
+
+#endif /* _SUDOERS_PARSE_H */