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

remove function about backup handling: the backup directory is now handled...

remove function about backup handling: the backup directory is now handled completely differently without the use of s6-rc
parent 10cf9622
No related branches found
No related tags found
No related merge requests found
/*
* backup.h
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#ifndef SS_BACKUP_H
#define SS_BACKUP_H
#include <skalibs/stralloc.h>
#include <66/ssexec.h>
extern int backup_make_new(ssexec_t *info,unsigned int type) ;
extern int backup_cmd_switcher(unsigned int verbosity,char const *cmd, ssexec_t *info) ;
extern int backup_switcher(int argc, char const *const *argv,ssexec_t *info) ;
extern int backup_realpath_sym(stralloc *sa,ssexec_t *info,unsigned int type) ;
#endif
/*
* backup_cmd_switcher.c
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#include <string.h>
#include <stdint.h>
#include <sys/stat.h>
#include <oblibs/obgetopt.h>
#include <oblibs/log.h>
#include <oblibs/string.h>
#include <oblibs/sastr.h>
#include <skalibs/stralloc.h>
#include <skalibs/types.h>
#include <skalibs/djbunix.h>
#include <skalibs/unix-transactional.h>//atomic_symlink
#include <66/constants.h>
#include <66/enum.h>
#include <66/ssexec.h>
//USAGE "backup_switcher [ -v verbosity ] [ -t type ] [ -b backup ] [ -s switch ] tree"
// for -b: return 0 if point to original source, return 1 if point to backup
// for -s: -s0 -> origin, -s1 -> backup ;
int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
{
unsigned int change, back, verbosity, type ;
uint32_t what = -1 ;
int r ;
struct stat st ;
char const *tree = NULL ;
verbosity = 1 ;
change = back = 0 ;
type = -1 ;
{
subgetopt l = SUBGETOPT_ZERO ;
for (;;)
{
int opt = getopt_args(argc,argv, "v:t:s:b", &l) ;
if (opt == -1) break ;
if (opt == -2) log_warn_return(LOG_EXIT_LESSONE,"options must be set first") ;
switch (opt)
{
case 'v' : if (!uint0_scan(l.arg, &verbosity)) return -1 ; break ;
case 't' : if (!uint0_scan(l.arg, &type)) return -1 ; break ;
case 's' : change = 1 ; if (!uint0_scan(l.arg, &what)) return -1 ; break ;
case 'b' : back = 1 ; break ;
default : return -1 ;
}
}
argc -= l.ind ; argv += l.ind ;
}
if (argc < 1) return -1 ;
if ((!change && !back) || type < 0) return -1 ;
if (type < TYPE_CLASSIC || type > TYPE_ONESHOT)
log_warn_return(LOG_EXIT_LESSONE,"unknown type for backup_switcher") ;
tree = *argv ;
size_t treelen = strlen(tree) ;
/** $HOME/66/system/tree/servicedirs */
//base.len-- ;
size_t psymlen ;
char *psym = NULL ;
if (type == TYPE_CLASSIC) {
psym = SS_SYM_SVC ;
psymlen = SS_SYM_SVC_LEN ;
} else {
psym = SS_SYM_DB ;
psymlen = SS_SYM_DB_LEN ;
}
char sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 + psymlen + 1] ;
auto_strings(sym, info->base.s, SS_SYSTEM, "/", tree, SS_SVDIRS, "/", psym) ;
if (back) {
if(lstat(sym,&st) < 0) return -1 ;
if(!(S_ISLNK(st.st_mode)))
log_warnusys_return(LOG_EXIT_LESSONE,"find symlink: ",sym) ;
stralloc symreal = STRALLOC_ZERO ;
r = sarealpath(&symreal,sym) ;
if (r < 0)
log_warnusys_return(LOG_EXIT_LESSONE,"retrieve real path from: ",sym) ;
char *b = NULL ;
b = memmem(symreal.s,symreal.len,SS_BACKUP,SS_BACKUP_LEN) ;
stralloc_free(&symreal) ;
if (!b) return SS_SWSRC ;
return SS_SWBACK ;
}
if (change) {
size_t psrclen ;
size_t pbacklen ;
char *psrc = NULL ;
char *pback = NULL ;
if (type == TYPE_CLASSIC) {
psrc = SS_SVC ;
psrclen = SS_SVC_LEN ;
pback = SS_SVC ;
pbacklen = SS_SVC_LEN ;
} else {
psrc = SS_DB ;
psrclen = SS_DB_LEN ;
pback = SS_DB ;
pbacklen = SS_DB_LEN ;
}
char dstsrc[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + psrclen + 1] ;
char dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen + pbacklen + 1] ;
auto_strings(dstsrc, info->base.s, SS_SYSTEM, "/", tree, SS_SVDIRS, psrc) ;
auto_strings(dstback, info->base.s, SS_SYSTEM, SS_BACKUP, "/", tree, pback) ;
if (what) {
if (!atomic_symlink(dstback, sym,"backup_switcher"))
log_warnusys_return(LOG_EXIT_LESSONE,"symlink: ", dstback) ;
}
if (!what) {
if (!atomic_symlink(dstsrc, sym,"backup_switcher"))
log_warnusys_return(LOG_EXIT_LESSONE,"symlink: ", dstsrc) ;
}
}
return 1 ;
}
int backup_cmd_switcher(unsigned int verbosity,char const *cmd,ssexec_t *info)
{
log_flow() ;
int r ;
size_t pos = 0 ;
stralloc opts = STRALLOC_ZERO ;
if (!sastr_clean_string(&opts,cmd))
log_warnu_return(LOG_EXIT_LESSONE,"clean: ",cmd) ;
int newopts = 5 + sastr_len(&opts) ;
char const *newargv[newopts] ;
unsigned int m = 0 ;
char fmt[UINT_FMT] ;
fmt[uint_fmt(fmt, verbosity)] = 0 ;
newargv[m++] = "backup_switcher" ;
newargv[m++] = "-v" ;
newargv[m++] = fmt ;
FOREACH_SASTR(&opts, pos)
newargv[m++] = opts.s + pos ;
newargv[m++] = info->treename.s ;
newargv[m++] = 0 ;
r = backup_switcher(newopts,newargv,info) ;
stralloc_free(&opts) ;
return r ;
}
/*
* backup_make_new.c
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#include <sys/stat.h>
#include <stddef.h>
#include <oblibs/log.h>
#include <oblibs/types.h>
#include <oblibs/directory.h>
#include <oblibs/string.h>
#include <skalibs/stralloc.h>
#include <skalibs/djbunix.h>
#include <66/constants.h>
#include <66/enum.h>
#include <66/resolve.h>
#include <66/tree.h>
#include <66/db.h>
// force: 0->check, 1->remove and create
int backup_make_new(ssexec_t *info, unsigned int type)
{
log_flow() ;
int r ;
size_t newsrc, newback ;
char *ptype = NULL ;
if (type == TYPE_CLASSIC) {
ptype = SS_SVC ;
} else {
ptype = SS_DB ;
}
char src[info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN + SS_RESOLVE_LEN + 1] ;
auto_strings(src, info->base.s, SS_SYSTEM, "/", info->treename.s, SS_SVDIRS, ptype) ;
newsrc = info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN ;
char back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len + SS_RESOLVE_LEN + 1] ;
auto_strings(back, info->base.s, SS_SYSTEM, SS_BACKUP, "/", info->treename.s, ptype) ;
newback = info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len ;
r = scan_mode(back,S_IFDIR) ;
if (r || (r < 0)) {
log_trace("rm directory: ", back) ;
if (rm_rf(back) < 0)
log_warnusys_return(LOG_EXIT_ZERO,"remove: ",back) ;
r = 0 ;
}
if (!r) {
log_trace("create directory: ", back) ;
if (!dir_create(back,0755))
log_warnusys_return(LOG_EXIT_ZERO,"create directory: ",back) ;
}
log_trace("copy: ",src," to: ", back) ;
if (!hiercopy(src, back))
log_warnusys_return(LOG_EXIT_ZERO,"copy: ",src," to ",back) ;
memcpy(src + newsrc,SS_RESOLVE,SS_RESOLVE_LEN) ;
src[newsrc + SS_RESOLVE_LEN] = 0 ;
memcpy(back + newback,SS_RESOLVE,SS_RESOLVE_LEN) ;
back[newback + SS_RESOLVE_LEN] = 0 ;
r = scan_mode(back,S_IFDIR) ;
if (r || (r < 0)) {
log_trace("rm directory: ", back) ;
if (rm_rf(back) < 0)
log_warnusys_return(LOG_EXIT_ZERO,"remove: ",back) ;
r = 0 ;
}
if (!r) {
log_trace("create directory: ", back) ;
if (!dir_create(back,0755))
log_warnusys_return(LOG_EXIT_ZERO,"create directory: ",back) ;
}
log_trace("copy: ",src," to: ", back) ;
if (!hiercopy(src, back))
log_warnusys_return(LOG_EXIT_ZERO,"copy: ",src," to ",back) ;
return 1 ;
}
/*
* backup_realpath_sym.c
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#include <66/utils.h>
#include <sys/types.h>
#include <string.h>
#include <oblibs/log.h>
#include <oblibs/types.h>
#include <oblibs/string.h>
#include <skalibs/stralloc.h>
#include <skalibs/djbunix.h>
#include <66/constants.h>
#include <66/enum.h>
#include <66/ssexec.h>
int backup_realpath_sym(stralloc *sa, ssexec_t *info,unsigned int type)
{
log_flow() ;
ssize_t r ;
size_t typelen ;
char *ptype = 0 ;
if (type == TYPE_CLASSIC) {
ptype = SS_SYM_SVC ;
typelen = SS_SYM_SVC_LEN;
} else {
ptype = SS_SYM_DB ;
typelen = SS_SYM_DB_LEN;
}
char sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen + 1] ;
auto_strings(sym, info->tree.s, SS_SVDIRS, "/", ptype, "/") ;
r = scan_mode(sym,S_IFDIR) ;
if(r <= 0)
return 0 ;
sa->len = 0 ;
r = sarealpath(sa,sym) ;
if (r == -1 )
return 0 ;
if (!stralloc_0(sa))
log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
return 1 ;
}
backup_cmd_switcher.o
backup_make_new.o
backup_realpath_sym.o
-loblibs
-lskarnet
/*
* service.c
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#include <66/state.h>
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