Skip to content
Snippets Groups Projects
Commit 70543292 authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

use resolve tree Master file to deal with the current one

parent 942e6ec1
Branches
Tags
No related merge requests found
...@@ -142,7 +142,7 @@ extern int tree_isvalid(char const *base, char const *treename) ; ...@@ -142,7 +142,7 @@ extern int tree_isvalid(char const *base, char const *treename) ;
/** Append @tree with the name of the current tree /** Append @tree with the name of the current tree
* @Return 1 on success * @Return 1 on success
* @Return 0 on fail */ * @Return 0 on fail */
extern int tree_find_current(stralloc *tree, char const *base, uid_t owner) ; extern int tree_find_current(stralloc *tree, char const *base) ;
/** @Return 1 on success /** @Return 1 on success
* @Return 0 if not valid * @Return 0 if not valid
...@@ -170,14 +170,6 @@ extern int tree_copy(stralloc *dir, char const *tree,char const *treename) ; ...@@ -170,14 +170,6 @@ extern int tree_copy(stralloc *dir, char const *tree,char const *treename) ;
extern int tree_copy_tmp(char const *workdir, ssexec_t *info) ; extern int tree_copy_tmp(char const *workdir, ssexec_t *info) ;
/** Set the tree to use as current for 66 tools
* This is avoid to use the -t options for all 66 tools
* Search on @base the directory current and append @tree
* with the path.
* @Return 1 on success
* @Return 0 on fail */
extern int tree_find_current(stralloc *tree, char const *base, uid_t owner) ;
extern int tree_get_permissions(char const *tree, uid_t owner) ; extern int tree_get_permissions(char const *tree, uid_t owner) ;
extern int tree_sethome(ssexec_t *info) ; extern int tree_sethome(ssexec_t *info) ;
......
...@@ -50,35 +50,28 @@ int tree_isvalid(char const *base, char const *treename) ...@@ -50,35 +50,28 @@ int tree_isvalid(char const *base, char const *treename)
return 1 ; return 1 ;
} }
int tree_find_current(stralloc *tree, char const *base, uid_t owner) int tree_find_current(stralloc *tree, char const *base)
{ {
log_flow() ; log_flow() ;
ssize_t r ; int e = 0 ;
size_t baselen = strlen(base) ; size_t baselen = strlen(base) ;
char pack[UID_FMT] ; resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ;
uint32_pack(pack,owner) ; char t[baselen + SS_SYSTEM_LEN + 1] ;
size_t packlen = uint_fmt(pack,owner) ;
pack[packlen] = 0 ;
char t[baselen + SS_TREE_CURRENT_LEN + 1 + packlen + 1 + SS_TREE_CURRENT_LEN + 1] ;
auto_strings(t, base, SS_TREE_CURRENT, "/", pack, "/", SS_TREE_CURRENT) ;
r = scan_mode(t,S_IFDIR) ;
if(r <= 0)
return 0 ;
r = sarealpath(tree,t) ; auto_strings(t, base, SS_SYSTEM) ;
if (r < 0 )
return 0 ;
if (!stralloc_0(tree)) if (!resolve_read(wres, t, SS_MASTER + 1))
return 0 ; goto err ;
tree->len--; if (!auto_stra(tree, base, SS_SYSTEM, "/", mres.sa.s + mres.current))
goto err ;
return 1 ; e = 1 ;
err:
resolve_free(wres) ;
return e ;
} }
int tree_iscurrent(char const *base, char const *treename) int tree_iscurrent(char const *base, char const *treename)
...@@ -87,8 +80,8 @@ int tree_iscurrent(char const *base, char const *treename) ...@@ -87,8 +80,8 @@ int tree_iscurrent(char const *base, char const *treename)
int e = -1 ; int e = -1 ;
size_t baselen = strlen(base) ; size_t baselen = strlen(base) ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ;
char t[baselen + SS_SYSTEM_LEN + 1] ; char t[baselen + SS_SYSTEM_LEN + 1] ;
auto_strings(t, base, SS_SYSTEM) ; auto_strings(t, base, SS_SYSTEM) ;
...@@ -96,7 +89,7 @@ int tree_iscurrent(char const *base, char const *treename) ...@@ -96,7 +89,7 @@ int tree_iscurrent(char const *base, char const *treename)
if (!resolve_read(wres, t, SS_MASTER + 1)) if (!resolve_read(wres, t, SS_MASTER + 1))
goto err ; goto err ;
if (!strcmp(tres.sa.s + tres.current, treename)) if (!strcmp(mres.sa.s + mres.current, treename))
e = 1 ; e = 1 ;
else else
e = 0 ; e = 0 ;
...@@ -135,8 +128,8 @@ int tree_isenabled(char const *base, char const *treename) ...@@ -135,8 +128,8 @@ int tree_isenabled(char const *base, char const *treename)
int e = -1 ; int e = -1 ;
size_t baselen = strlen(base), pos = 0 ; size_t baselen = strlen(base), pos = 0 ;
stralloc sa = STRALLOC_ZERO ; stralloc sa = STRALLOC_ZERO ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ;
char solve[baselen + SS_SYSTEM_LEN + 1] ; char solve[baselen + SS_SYSTEM_LEN + 1] ;
auto_strings(solve, base, SS_SYSTEM) ; auto_strings(solve, base, SS_SYSTEM) ;
...@@ -144,9 +137,9 @@ int tree_isenabled(char const *base, char const *treename) ...@@ -144,9 +137,9 @@ int tree_isenabled(char const *base, char const *treename)
if (!resolve_read(wres, solve, SS_MASTER + 1)) if (!resolve_read(wres, solve, SS_MASTER + 1))
goto err ; goto err ;
if (tres.nenabled) { if (mres.nenabled) {
if (!sastr_clean_string(&sa, tres.sa.s + tres.enabled)) if (!sastr_clean_string(&sa, mres.sa.s + mres.enabled))
goto err ; goto err ;
e = 0 ; e = 0 ;
......
...@@ -46,7 +46,7 @@ int tree_sethome(ssexec_t *info) ...@@ -46,7 +46,7 @@ int tree_sethome(ssexec_t *info)
if (!info->treename.len) { if (!info->treename.len) {
if (!tree_find_current(&info->tree, base, owner)) if (!tree_find_current(&info->tree, base))
return -3 ; return -3 ;
if (!tree_setname(&info->treename,info->tree.s)) if (!tree_setname(&info->treename,info->tree.s))
......
...@@ -15,59 +15,25 @@ ...@@ -15,59 +15,25 @@
#include <66/tree.h> #include <66/tree.h>
#include <sys/types.h> #include <sys/types.h>
#include <stddef.h> #include <string.h>
#include <oblibs/string.h> #include <oblibs/string.h>
#include <oblibs/directory.h> #include <oblibs/log.h>
#include <oblibs/types.h>
#include <skalibs/stralloc.h>
#include <skalibs/types.h>
#include <skalibs/unix-transactional.h>
#include <66/config.h>
#include <66/constants.h> #include <66/constants.h>
#include <66/utils.h>
#include <66/resolve.h> #include <66/resolve.h>
int tree_switch_current(char const *base, char const *treename) int tree_switch_current(char const *base, char const *treename)
{ {
log_flow() ; log_flow() ;
ssize_t r ; ssize_t r ;
size_t baselen = strlen(base), treelen = strlen(treename), newlen = 0, packlen = 0 ; size_t baselen = strlen(base), treelen = strlen(treename) ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ;
char pack[UID_FMT] ;
char dst[baselen + SS_TREE_CURRENT_LEN + 1 + packlen + treelen + 2 + 1] ;
packlen = uint_fmt(pack,MYUID) ;
pack[packlen] = 0 ;
auto_strings(dst,base,SS_SYSTEM,"/",treename) ;
r = scan_mode(dst,S_IFDIR) ;
if (r <= 0) return 0 ;
auto_string_from(dst,baselen,SS_TREE_CURRENT,"/",pack) ;
newlen = baselen + SS_TREE_CURRENT_LEN + 1 + packlen ;
r = scan_mode(dst,S_IFDIR) ;
if (!r){
if (!dir_create_parent(dst,0755)) return 0 ;
}
if(r == -1) return 0 ;
char current[newlen + 1 + SS_TREE_CURRENT_LEN + 1] ;
auto_strings(current,dst,"/",SS_TREE_CURRENT) ;
auto_string_from(dst,baselen,SS_SYSTEM,"/",treename) ;
if (!atomic_symlink(dst, current,"tree_switch_current")) return 0 ;
if (!resolve_modify_field_g(wres, base, SS_MASTER + 1, TREE_ENUM_CURRENT, treename)) if (!resolve_modify_field_g(wres, base, SS_MASTER + 1, TREE_ENUM_MASTER_CURRENT, treename))
log_warnu_return(LOG_EXIT_ZERO, "modify field: ", resolve_tree_field_table[TREE_ENUM_CURRENT].field," of tree: ", SS_MASTER + 1, " with value: ", treename) ; log_warnu_return(LOG_EXIT_ZERO, "modify field: ", resolve_tree_master_field_table[TREE_ENUM_MASTER_CURRENT].field," of inner resolve file with value: ", treename) ;
resolve_free(wres) ; resolve_free(wres) ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment