// // aegis - project change supervisor // Copyright (C) 2006-2008, 2011, 2012 Peter Miller // // 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 3 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, see // . // #include #include #include #include void project::get_the_owner() { trace(("%s\n", __PRETTY_FUNCTION__)); // // If the project owner is already established, // don't do anything here. // if (uid >= 0 && gid >= 0) return; int err = project_is_readable(this); trace(("err = %d\n", err)); if (err != 0) { off_limits = true; os_become_orig_query(&uid, &gid, 0); return; } // // When checking the project home path owner, we append "/." // to force the automounter to mount it. Some automounters // don't actually trigger until the directory lookup happens, // which gives nasty results when we stat the directory to see // who ownes it (the automounter frequently returns 0,0 which // gives a "tampering" error). // os_become_orig(); string_ty *s = str_format("%s/.", home_path_get()->str_text); os_owner_query(s, &uid, &gid); str_free(s); os_become_undo(); // // Make sure the project UID and GID are acceptable. This mirrors // the tests in aegis/aenpr.c when the project is first created. // if (uid < AEGIS_MIN_UID) { sub_context_ty *scp; scp = sub_context_new(); sub_var_set_string(scp, "File_Name", home_path_get()); sub_var_set_long(scp, "Number1", uid); sub_var_set_long(scp, "Number2", AEGIS_MIN_UID); fatal_intl ( scp, i18n("$filename: uid $number1 invalid, must be >= $number2") ); // NOTREACHED sub_context_delete(scp); } if (gid < AEGIS_MIN_GID) { sub_context_ty *scp; scp = sub_context_new(); sub_var_set_string(scp, "File_Name", home_path_get()); sub_var_set_long(scp, "Number1", gid); sub_var_set_long(scp, "Number2", AEGIS_MIN_GID); fatal_intl ( scp, i18n("$filename: gid $number1 invalid, must be >= $number2") ); // NOTREACHED sub_context_delete(scp); } } // vim: set ts=8 sw=4 et :