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

rename environment directory for a daemon to conf from env, place it at the...

rename environment directory for a daemon to conf from env, place it at the directory of the current user of the process,use the 66-envfile in run file
parent 8f50e4fe
No related branches found
No related tags found
No related merge requests found
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
#define SS_SWBACK 1 //switch to backup #define SS_SWBACK 1 //switch to backup
/** environment and data */ /** environment and data */
#define SS_ENVDIR "/env" #define SS_ENVDIR "/conf"
#define SS_ENVDIR_LEN (sizeof SS_ENVDIR - 1) #define SS_ENVDIR_LEN (sizeof SS_ENVDIR - 1)
#define SS_DATADIR "/data" #define SS_DATADIR "/data"
#define SS_DATADIR_LEN (sizeof SS_DATADIR - 1) #define SS_DATADIR_LEN (sizeof SS_DATADIR - 1)
......
...@@ -330,7 +330,7 @@ extern int write_consprod(sv_alltype *sv,char const *prodname,char const *consna ...@@ -330,7 +330,7 @@ extern int write_consprod(sv_alltype *sv,char const *prodname,char const *consna
extern int write_dependencies(char const *src, sv_name_t *cname,char const *dst,char const *filename, genalloc *ga, unsigned int force) ; extern int write_dependencies(char const *src, sv_name_t *cname,char const *dst,char const *filename, genalloc *ga, unsigned int force) ;
extern int write_env(genalloc *env,stralloc *sa,char const *dst) ; extern int write_env(char const *name, genalloc *env,stralloc *sa,char const *dst) ;
extern void freed_parser(void) ; extern void freed_parser(void) ;
......
...@@ -752,18 +752,28 @@ int write_common(sv_alltype *sv, char const *dst) ...@@ -752,18 +752,28 @@ int write_common(sv_alltype *sv, char const *dst)
/** environment */ /** environment */
if (sv->opts[2]) if (sv->opts[2])
{ {
stralloc sa = STRALLOC_ZERO ;
if (!set_ownersysdir(&sa,MYUID))
{
VERBO3 strerr_warnwu1sys("get home system directory") ;
return 0 ;
}
/** /etc/env/sv_name*/ /** /etc/env/sv_name*/
size_t sslen = strlen(SS_SERVICEDIR) - 1 ; size_t sslen = sa.len - 2 ;//-2 remove 0 and '/'
char *name = keep.s + sv->cname.name ; char *name = keep.s + sv->cname.name ;
size_t namelen = strlen(name) ; size_t namelen = strlen(name) ;
char dst[sslen + SS_ENVDIR_LEN + 1 + namelen + 1] ; char dst[sslen + SS_ENVDIR_LEN + 1] ;
memcpy(dst,SS_SERVICEDIR,sslen) ; memcpy(dst,sa.s,sslen) ;
memcpy(dst + sslen,SS_ENVDIR,SS_ENVDIR_LEN) ; memcpy(dst + sslen,SS_ENVDIR,SS_ENVDIR_LEN) ;
dst[sslen + SS_ENVDIR_LEN] = 0 ; dst[sslen + SS_ENVDIR_LEN] = 0 ;
stralloc_free(&sa) ;
r = scan_mode(dst,S_IFDIR) ; r = scan_mode(dst,S_IFDIR) ;
if (r < 0) if (r < 0)
{ {
VERBO3 strerr_warnwu2sys("invalid environment directory: ",dst) ; VERBO3 strerr_warnw2sys("invalid environment directory: ",dst) ;
return 0 ; return 0 ;
} }
if (!r) if (!r)
...@@ -774,12 +784,8 @@ int write_common(sv_alltype *sv, char const *dst) ...@@ -774,12 +784,8 @@ int write_common(sv_alltype *sv, char const *dst)
return 0 ; return 0 ;
} }
} }
dst[sslen + SS_ENVDIR_LEN] = '/' ; if (!write_env(name,&sv->env,&saenv,dst))
memcpy(dst + sslen + SS_ENVDIR_LEN + 1, name,namelen) ;
dst[sslen + SS_ENVDIR_LEN + 1 + namelen] = 0 ;
if (!write_env(&sv->env,&saenv,dst))
{ {
VERBO3 strerr_warnwu1x("write environment") ; VERBO3 strerr_warnwu1x("write environment") ;
return 0 ; return 0 ;
...@@ -792,10 +798,9 @@ int write_common(sv_alltype *sv, char const *dst) ...@@ -792,10 +798,9 @@ int write_common(sv_alltype *sv, char const *dst)
int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,int mode) int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,int mode)
{ {
unsigned int key, val ;
unsigned int type = sv->cname.itype ; unsigned int type = sv->cname.itype ;
char *name = keep.s+sv->cname.name ; char *name = keep.s+sv->cname.name ;
size_t namelen = strlen(name) ;
size_t filelen = strlen(file) ; size_t filelen = strlen(file) ;
size_t dstlen = strlen(dst) ; size_t dstlen = strlen(dst) ;
char write[dstlen + 1 + filelen + 1] ; char write[dstlen + 1 + filelen + 1] ;
...@@ -806,16 +811,21 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,in ...@@ -806,16 +811,21 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,in
stralloc runuser = STRALLOC_ZERO ; stralloc runuser = STRALLOC_ZERO ;
stralloc execute = STRALLOC_ZERO ; stralloc execute = STRALLOC_ZERO ;
key = val = 0 ; stralloc sa = STRALLOC_ZERO ;
size_t envdstlen = strlen(SS_SERVICEDIR) - 1; if (!set_ownersysdir(&sa,MYUID))
char envdata[envdstlen + SS_ENVDIR_LEN + 1 + namelen + 1] ; {
memcpy(envdata,SS_SERVICEDIR,envdstlen) ; VERBO3 strerr_warnwu1sys("get home system directory") ;
return 0 ;
}
size_t envdstlen = sa.len - 2 ;//-2 0 of stra and last '/'
char envdata[envdstlen + SS_ENVDIR_LEN + 1] ;
memcpy(envdata,sa.s,envdstlen) ;
memcpy(envdata + envdstlen, SS_ENVDIR,SS_ENVDIR_LEN) ; memcpy(envdata + envdstlen, SS_ENVDIR,SS_ENVDIR_LEN) ;
envdata[envdstlen + SS_ENVDIR_LEN] = '/' ; envdata[envdstlen + SS_ENVDIR_LEN] = 0 ;
memcpy(envdata + envdstlen + SS_ENVDIR_LEN + 1, name,namelen) ;
envdata[envdstlen + SS_ENVDIR_LEN + 1 + namelen] = 0 ;
stralloc_free(&sa) ;
switch (exec->build) switch (exec->build)
{ {
case AUTO: case AUTO:
...@@ -833,31 +843,11 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,in ...@@ -833,31 +843,11 @@ int write_exec(sv_alltype *sv, sv_exec *exec,char const *file,char const *dst,in
/** environment */ /** environment */
if (sv->opts[2] && (exec->build == AUTO)) if (sv->opts[2] && (exec->build == AUTO))
{ {
if (!stralloc_cats(&env,S6_BINPREFIX "s6-envdir ")) retstralloc(0,"write_exec") ; if (!stralloc_cats(&env,S6_BINPREFIX "66-envfile -f ")) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,name)) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env," ")) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,envdata)) retstralloc(0,"write_exec") ; if (!stralloc_cats(&env,envdata)) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,"\n")) retstralloc(0,"write_exec") ; if (!stralloc_cats(&env,"\n")) retstralloc(0,"write_exec") ;
if (genalloc_len(diuint32,&sv->env))
{
for (unsigned int i = 0 ; i < genalloc_len(diuint32,&sv->env) ; i++)
{
key = genalloc_s(diuint32,&sv->env)[i].left ;
if ((saenv.s+key)[0] == '!')
{
if (!stralloc_cats(&env,"importas -uD \"\" ")) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,saenv.s+1+key)) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env," ")) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,saenv.s+1+key)) retstralloc(0,"write_exec") ;
}
else
{
if (!stralloc_cats(&env,"importas -D \"\" ")) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,saenv.s+key)) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env," ")) retstralloc(0,"write_exec") ;
if (!stralloc_cats(&env,saenv.s+key)) retstralloc(0,"write_exec") ;
}
if (!stralloc_cats(&env,"\n")) retstralloc(0,"write_exec") ;
}
}
} }
/** shebang */ /** shebang */
if (type != ONESHOT) if (type != ONESHOT)
...@@ -997,14 +987,14 @@ int write_uint(char const *dst, char const *name, uint32_t ui) ...@@ -997,14 +987,14 @@ int write_uint(char const *dst, char const *name, uint32_t ui)
return 1 ; return 1 ;
} }
int write_env(genalloc *env,stralloc *sa,char const *dst) int write_env(char const *name, genalloc *env,stralloc *sa,char const *dst)
{ {
int r ; int r ;
stralloc tmp = STRALLOC_ZERO ;
if (genalloc_len(diuint32,env)) if (genalloc_len(diuint32,env))
{ {
unsigned int key = 0 ; char *key = 0 ;
unsigned int val = 0 ; char *val = 0 ;
r = scan_mode(dst,S_IFDIR) ; r = scan_mode(dst,S_IFDIR) ;
if (r < 0) if (r < 0)
{ {
...@@ -1021,23 +1011,22 @@ int write_env(genalloc *env,stralloc *sa,char const *dst) ...@@ -1021,23 +1011,22 @@ int write_env(genalloc *env,stralloc *sa,char const *dst)
} }
for (unsigned int i = 0 ; i < genalloc_len(diuint32,env) ; i++) for (unsigned int i = 0 ; i < genalloc_len(diuint32,env) ; i++)
{ {
key = genalloc_s(diuint32,env)[i].left ; key = sa->s + genalloc_s(diuint32,env)[i].left ;
val = genalloc_s(diuint32,env)[i].right ; val = sa->s + genalloc_s(diuint32,env)[i].right ;
if ((sa->s+key)[0] == '!') if (!stralloc_cats(&tmp,key)) retstralloc(0,"write_env") ;
key++ ; if (!stralloc_cats(&tmp,"=")) retstralloc(0,"write_env") ;
/* if (dir_search(dst,sa->s+key,S_IFREG)) if (!stralloc_cats(&tmp,val)) retstralloc(0,"write_env") ;
{ if (!stralloc_cats(&tmp,"\n")) retstralloc(0,"write_env") ;
VERBO3 strerr_warnw5x("file: ",dst,"/",sa->s+key," already exist, skip it") ;
continue ;
}*/
if (!file_write_unsafe(dst,sa->s+key,sa->s+val,strlen(sa->s+val)))
{
VERBO3 strerr_warnwu4sys("create file: ",dst,"/",sa->s+key) ;
return 0 ;
}
} }
} }
if (!file_write_unsafe(dst,name,tmp.s,tmp.len))
{
VERBO3 strerr_warnwu4sys("create file: ",dst,"/",name) ;
return 0 ;
}
stralloc_free(&tmp) ;
return 1 ; return 1 ;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment