aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-helper-transport-wlan.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-07-20 11:16:52 +0000
committerChristian Grothoff <christian@grothoff.org>2012-07-20 11:16:52 +0000
commita5d6aecaeb8fac43d885d5e8cfad3d33b8f271b4 (patch)
tree26a2e37a9016b97abc73bbe5a838e753d5d519cd /src/transport/gnunet-helper-transport-wlan.c
parent5a92a881f4eaed19a7165cbf162d305aa710ba35 (diff)
downloadgnunet-a5d6aecaeb8fac43d885d5e8cfad3d33b8f271b4.tar.gz
gnunet-a5d6aecaeb8fac43d885d5e8cfad3d33b8f271b4.zip
-better fix for perm issue
Diffstat (limited to 'src/transport/gnunet-helper-transport-wlan.c')
-rw-r--r--src/transport/gnunet-helper-transport-wlan.c49
1 files changed, 23 insertions, 26 deletions
diff --git a/src/transport/gnunet-helper-transport-wlan.c b/src/transport/gnunet-helper-transport-wlan.c
index cc3891b02..2edd171f4 100644
--- a/src/transport/gnunet-helper-transport-wlan.c
+++ b/src/transport/gnunet-helper-transport-wlan.c
@@ -1869,36 +1869,10 @@ main (int argc, char *argv[])
1869 int raw_eno; 1869 int raw_eno;
1870 1870
1871 /* make use of SGID capabilities on POSIX */ 1871 /* make use of SGID capabilities on POSIX */
1872 /* FIXME: this might need a port on systems without 'getresgid' */
1873 if (-1 == setreuid (0, 0))
1874 fprintf (stderr, "setreuid failed: %s\n", strerror (errno));
1875
1876 memset (&dev, 0, sizeof (dev)); 1872 memset (&dev, 0, sizeof (dev));
1877 dev.fd_raw = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL)); 1873 dev.fd_raw = socket (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL));
1878 raw_eno = errno; /* remember for later */ 1874 raw_eno = errno; /* remember for later */
1879 1875
1880 /* drop privs */
1881 {
1882 uid_t uid = getuid ();
1883#ifdef HAVE_SETRESUID
1884 if (0 != setresuid (uid, uid, uid))
1885 {
1886 fprintf (stderr, "Failed to setresuid: %s\n", strerror (errno));
1887 if (-1 != dev.fd_raw)
1888 (void) close (dev.fd_raw);
1889 return 1;
1890 }
1891#else
1892 if (0 != (setuid (uid) | seteuid (uid)))
1893 {
1894 fprintf (stderr, "Failed to setuid: %s\n", strerror (errno));
1895 if (-1 != dev.fd_raw)
1896 (void) close (dev.fd_raw);
1897 return 1;
1898 }
1899 }
1900#endif
1901
1902 /* now that we've dropped root rights, we can do error checking */ 1876 /* now that we've dropped root rights, we can do error checking */
1903 if (2 != argc) 1877 if (2 != argc)
1904 { 1878 {
@@ -1933,6 +1907,29 @@ main (int argc, char *argv[])
1933 return 1; 1907 return 1;
1934 } 1908 }
1935 1909
1910 /* drop privs */
1911 {
1912 uid_t uid = getuid ();
1913#ifdef HAVE_SETRESUID
1914 if (0 != setresuid (uid, uid, uid))
1915 {
1916 fprintf (stderr, "Failed to setresuid: %s\n", strerror (errno));
1917 if (-1 != dev.fd_raw)
1918 (void) close (dev.fd_raw);
1919 return 1;
1920 }
1921#else
1922 if (0 != (setuid (uid) | seteuid (uid)))
1923 {
1924 fprintf (stderr, "Failed to setuid: %s\n", strerror (errno));
1925 if (-1 != dev.fd_raw)
1926 (void) close (dev.fd_raw);
1927 return 1;
1928 }
1929 }
1930#endif
1931
1932
1936 /* send MAC address of the WLAN interface to STDOUT first */ 1933 /* send MAC address of the WLAN interface to STDOUT first */
1937 { 1934 {
1938 struct GNUNET_TRANSPORT_WLAN_HelperControlMessage macmsg; 1935 struct GNUNET_TRANSPORT_WLAN_HelperControlMessage macmsg;