aboutsummaryrefslogtreecommitdiffstats
path: root/epan/privileges.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2006-02-06 03:11:34 +0000
committerGuy Harris <guy@alum.mit.edu>2006-02-06 03:11:34 +0000
commit4c4f18eb3f756a95f550650d689b7854308695ae (patch)
tree7ef8d7904d3b4c12c104e534a354fe4ef109067e /epan/privileges.c
parent41a8855e1b67bb3909f8e86a466af397204334ad (diff)
Add code to check whether the app was started with special privileges
(e.g., set-UID or set-GID), and don't load user plugs if it is. svn path=/trunk/; revision=17174
Diffstat (limited to 'epan/privileges.c')
-rw-r--r--epan/privileges.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/epan/privileges.c b/epan/privileges.c
new file mode 100644
index 0000000000..8739cb9fba
--- /dev/null
+++ b/epan/privileges.c
@@ -0,0 +1,95 @@
+/* privileges.c
+ * Routines for handling privileges, e.g. set-UID and set-GID on UNIX.
+ *
+ * $Id$
+ *
+ * Ethereal - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 2006 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <glib.h>
+
+#include "privileges.h"
+
+#ifdef _WIN32
+
+/*
+ * Called when the program starts, to save whatever credential information
+ * we'll need later.
+ */
+void
+get_credential_info(void)
+{
+}
+
+/*
+ * For now, we say the program wasn't started with special privileges.
+ * There are ways of running programs with credentials other than those
+ * for the session in which it's run, but I don't know whether that'd be
+ * done with Ethereal/Tethereal or not.
+ */
+gboolean
+started_with_special_privs(void)
+{
+ return FALSE;
+}
+
+#else /* _WIN32 */
+
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+static uid_t ruid, euid;
+static gid_t rgid, egid;
+
+/*
+ * Called when the program starts, to save whatever credential information
+ * we'll need later.
+ * That'd be the real and effective UID and GID on UNIX.
+ */
+void
+get_credential_info(void)
+{
+ ruid = getuid();
+ euid = geteuid();
+ rgid = getgid();
+ egid = getegid();
+}
+
+/*
+ * "Started with special privileges" means "started out set-UID or set-GID".
+ */
+gboolean
+started_with_special_privs(void)
+{
+#ifdef HAVE_ISSETUGID
+ return issetugid();
+#else
+ return (ruid != euid || rgid != egid);
+#endif
+}
+#endif /* _WIN32 */