<pre style='margin:0'>
Clemens Lang (neverpanic) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/ac1a9b0991ffb34769847d188a9c71fbce24d65c">https://github.com/macports/macports-base/commit/ac1a9b0991ffb34769847d188a9c71fbce24d65c</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new ac1a9b09 port1.0: Ensure adduser drops privs in all cases
</span>ac1a9b09 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit ac1a9b0991ffb34769847d188a9c71fbce24d65c
</span>Author: Clemens Lang <cal@macports.org>
AuthorDate: Fri Jun 19 13:16:42 2020 +0200

<span style='display:block; white-space:pre;color:#404040;'>    port1.0: Ensure adduser drops privs in all cases
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    adduser and addgroup (invoked by the add_users statement in
</span><span style='display:block; white-space:pre;color:#404040;'>    handle_add_users) elevates its privileges, but does not always drop them
</span><span style='display:block; white-space:pre;color:#404040;'>    again. Specifically, this could happen if a user or group already
</span><span style='display:block; white-space:pre;color:#404040;'>    existed, in which case adduser did elevate to root, but not drop back to
</span><span style='display:block; white-space:pre;color:#404040;'>    the macportsuser again.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This can cause files to be created with incorrect permissions, which can
</span><span style='display:block; white-space:pre;color:#404040;'>    then cause permissions problems in subsequent phases.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/50918
</span>---
 src/port1.0/portutil.tcl | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portutil.tcl b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 5c45d20a..5fe0c869 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2326,9 +2326,6 @@ proc adduser {name args} {
</span>         ui_warn "adduser only works when running as root."
         ui_warn "The requested user '$name' was not created."
         return
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[geteuid] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        seteuid 0; setegid 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set escalated 1
</span>     }
 
     set passwd {*}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2349,6 +2346,11 @@ proc adduser {name args} {
</span>         return
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[geteuid] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        seteuid 0; setegid 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set escalated 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     if {${os.platform} eq "darwin"} {
         set dscl [findBinary dscl $portutil::autoconf::dscl_path]
         set failed? 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2415,6 +2417,11 @@ proc adduser {name args} {
</span>                     }
                 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                # drop privileges if they were escalated before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[info exists escalated]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    dropPrivileges
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>                 # and raise an error to abort
                 error "dscl failed to create required user $name."
             }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2437,9 +2444,6 @@ proc addgroup {name args} {
</span>         ui_warn "addgroup only works when running as root."
         ui_warn "The requested group '$name' was not created."
         return
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    } elseif {[geteuid] != 0} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        seteuid 0; setegid 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set escalated 1
</span>     }
 
     set gid [nextgid]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2458,6 +2462,11 @@ proc addgroup {name args} {
</span>         return
     }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[geteuid] != 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        seteuid 0; setegid 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set escalated 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     if {${os.platform} eq "darwin"} {
         set dscl [findBinary dscl $portutil::autoconf::dscl_path]
         set failed? 0
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2514,6 +2523,10 @@ proc addgroup {name args} {
</span>                     }
                 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[info exists escalated]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    dropPrivileges
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>                 # and raise an error to abort
                 error "dscl failed to create required group $name."
             }
</pre><pre style='margin:0'>

</pre>