@@ -462,10 +462,30 @@ static int tcl_appfs_simulate_user_fs_leave(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { appfs_simulate_user_fs_leave(); return(TCL_OK); } + +static int tcl_appfs_get_fsuid(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + uid_t fsuid; + + fsuid = appfs_get_fsuid(); + + Tcl_SetObjResult(interp, Tcl_NewWideIntObj(fsuid)); + + return(TCL_OK); +} + +static int tcl_appfs_get_fsgid(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { + gid_t fsgid; + + fsgid = appfs_get_fsgid(); + + Tcl_SetObjResult(interp, Tcl_NewWideIntObj(fsgid)); + + return(TCL_OK); +} /* * Generate an inode for a given path. The inode should be computed in such * a way that it is unlikely to be duplicated and remains the same for a given * file @@ -716,12 +736,12 @@ stbuf->st_mtime = pathinfo.time; stbuf->st_ctime = pathinfo.time; stbuf->st_atime = pathinfo.time; stbuf->st_ino = pathinfo.inode; stbuf->st_mode = 0; - stbuf->st_uid = appfs_get_fsuid(); - stbuf->st_gid = appfs_get_fsgid(); + stbuf->st_uid = 0; + stbuf->st_gid = 0; switch (pathinfo.type) { case APPFS_PATHTYPE_DIRECTORY: stbuf->st_mode = S_IFDIR | 0555; stbuf->st_nlink = 2 + pathinfo.typeinfo.dir.childcount; @@ -1166,10 +1186,12 @@ return(TCL_ERROR); } #endif Tcl_CreateObjCommand(interp, "appfsd::get_homedir", tcl_appfs_get_homedir, NULL, NULL); + Tcl_CreateObjCommand(interp, "appfsd::get_fsuid", tcl_appfs_get_fsuid, NULL, NULL); + Tcl_CreateObjCommand(interp, "appfsd::get_fsgid", tcl_appfs_get_fsgid, NULL, NULL); Tcl_CreateObjCommand(interp, "appfsd::simulate_user_fs_enter", tcl_appfs_simulate_user_fs_enter, NULL, NULL); Tcl_CreateObjCommand(interp, "appfsd::simulate_user_fs_leave", tcl_appfs_simulate_user_fs_leave, NULL, NULL); Tcl_PkgProvide(interp, "appfsd", "1.0");