1549N/A * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved. 0N/A * Permission is hereby granted, free of charge, to any person obtaining a 919N/A * copy of this software and associated documentation files (the "Software"), 919N/A * to deal in the Software without restriction, including without limitation 919N/A * the rights to use, copy, modify, merge, publish, distribute, sublicense, 919N/A * and/or sell copies of the Software, and to permit persons to whom the 919N/A * Software is furnished to do so, subject to the following conditions: 919N/A * The above copyright notice and this permission notice (including the next 919N/A * paragraph) shall be included in all copies or substantial portions of the 919N/A * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 919N/A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 919N/A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 919N/A * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 919N/A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 919N/A * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 919N/A * DEALINGS IN THE SOFTWARE. 781N/A * communication pipe. The Display Manager process will start 781N/A * the X window server at system boot time before any user 781N/A * has logged into the system. The X server is by default 0N/A * started as the root UID "0". 781N/A * At login time the Xserver local communication pipe is provided 781N/A * by the Xserver for user specific configuration data supplied 781N/A * by the display manager. It notifies the Xserver it needs to change 0N/A * over to the user's credentials (UID, GID, GID_LIST) and 781N/A * also switch CWD (current working directory) of to match 0N/A * the user's CWD home. 781N/A * When shutting down, the Xserver restores it's original uid/gid as 781N/A * For the original definition, see Sun ASARC case 1995/390 781N/A/* Data about the user we need to switch to */ 419N/A char *
buf;
/* contains characters to be processed */ 781N/A/* Data stored in screen privates */ 0N/A * initialize DTLOGIN: create pipe; set handlers. 781N/A * cleanup dtlogin pipe at exit if still running, reset privs back to 781N/A * root as needed for various cleanup tasks. 781N/A /* Unwrap CloseScreen and call down to further levels */ 419N/A /* dmd may have been freed in dtlogin_receive_packet, do 419N/A not use after this point */ 0N/A /* To make sure root has rw permissions. */ 419N/A /* Read data from pipe and split into tokens, buffering the rest */ 419N/A * Realloc only if buf has filled up and we don't have a record 419N/A * delimiter yet. Keep track of alloced size. 419N/A return;
/* return to WaitFor, wait for select() */ 419N/A /* save the rest for the next iteration */ 419N/A/* Parse data from packet 419N/A * G_LIST_ID="aaa" G_LIST_ID="bbb" G_LIST_ID="ccc"; 419N/A /* format is key="value" - split into key & value pair */ 419N/A /* Skip over whitespace */ 419N/A *p =
'\0';
/* end of key string */ 419N/A v = p +
1;
/* start of value string */ 419N/A *p =
'\0';
/* end of value string */ 419N/A s = p +
1;
/* start of next pair */ 419N/A /* Found key & value, now process & put into dmd */ 419N/A /* End of transmission, process & close */ 419N/A /* Value is numeric, convert to int */ 419N/A /* strtol couldn't parse the results */ 419N/A /* Value out of range */ 419N/A /* This gid dance is necessary in order to make sure 419N/A our "saved-set-gid" is 0 so that we can regain gid 419N/A 0 when necessary for priocntl & power management. 781N/A The first step sets rgid to the user's gid and 419N/A makes the egid & saved-gid be 0. The second then 419N/A sets the egid to the users gid, but leaves the 419N/A * BUG: 4462531: Set project ID for Xserver 781N/A * Get user name and default project. 781N/A * Set before the uid value is set. 781N/A /* Wrap closeScreen to allow resetting uid on closedown */ 781N/A /* Inform the kernel whether a user has logged in on this VT device */