X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Futils%2Fctdlmigrate.c;h=21dad4b24f87f331956542a95ced05e13db28ace;hb=b9a2089d59579d13694e08b299c2aaf44ef9df6c;hp=b165113b6943a045434759ec7d65f36aed113c15;hpb=6106c1da54f0923550c7bdceb45246fb88e9ea19;p=citadel.git diff --git a/citadel/utils/ctdlmigrate.c b/citadel/utils/ctdlmigrate.c index b165113b6..21dad4b24 100644 --- a/citadel/utils/ctdlmigrate.c +++ b/citadel/utils/ctdlmigrate.c @@ -5,21 +5,15 @@ * The scope of this program isn't wide enough to make a difference. If you don't like * it you can rewrite it. * - * Copyright (c) 2009 citadel.org + * Copyright (c) 2009-2021 citadel.org * - * 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 open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3. * - * 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, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * 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. * * (Note: a useful future enhancement might be to support "-h" on both sides) * @@ -47,9 +41,6 @@ #include "sysdep.h" #include "config.h" #include "citadel_dirs.h" -#if HAVE_BACKTRACE -#include -#endif @@ -61,7 +52,7 @@ void getz(char *buf) { char *ptr; - ptr = fgets(buf, 32767, stdin); + ptr = fgets(buf, SIZ, stdin); if (!ptr) { buf[0] = 0; return; @@ -75,11 +66,7 @@ void getz(char *buf) { -int main(int argc, char *argv[]) -{ - int relh=0; - int home=0; - char relhome[PATH_MAX]=""; +int main(int argc, char *argv[]) { char ctdldir[PATH_MAX]=CTDLDIR; char yesno[5]; char sendcommand[PATH_MAX]; @@ -87,8 +74,8 @@ int main(int argc, char *argv[]) char cmd[PATH_MAX]; char buf[PATH_MAX]; char socket_path[PATH_MAX]; - char remote_user[256]; - char remote_host[256]; + char remote_user[SIZ]; + char remote_host[SIZ]; char remote_sendcommand[PATH_MAX]; FILE *sourcefp = NULL; FILE *targetfp = NULL; @@ -96,11 +83,15 @@ int main(int argc, char *argv[]) char spinning[4] = "-\\|/" ; int exitcode = 0; - calc_dirs_n_files(relh, home, relhome, ctdldir, 0); CtdlMakeTempFileName(socket_path, sizeof socket_path); + if (chdir(ctdldir) != 0) { + fprintf(stderr, "sendcommand: %s: %s\n", ctdldir, strerror(errno)); + exit(errno); + } - cmdexit = system("clear"); - printf( "-------------------------------------------\n" + + printf( "\033[2J\033[H\n" + "-------------------------------------------\n" "Over-the-wire migration utility for Citadel\n" "-------------------------------------------\n" "\n" @@ -108,7 +99,7 @@ int main(int argc, char *argv[]) "to a new host system via a network connection, without disturbing\n" "the source system. The target may be a different CPU architecture\n" "and/or operating system. The source system should be running\n" - "Citadel %d.%02d or newer, and the target system should be running\n" + "Citadel version %d or newer, and the target system should be running\n" "either the same version or a newer version. You will also need\n" "the 'rsync' utility, and OpenSSH v4 or newer.\n" "\n" @@ -117,8 +108,7 @@ int main(int argc, char *argv[]) "\n" "Do you wish to continue? " , - EXPORT_REV_MIN / 100, - EXPORT_REV_MIN % 100 + EXPORT_REV_MIN ); if ((fgets(yesno, sizeof yesno, stdin) == NULL) || (tolower(yesno[0]) != 'y')) { @@ -143,10 +133,14 @@ int main(int argc, char *argv[]) "(example: ctdl.foo.org)\n" "--> "); getz(remote_host); + +get_remote_user: printf("\nEnter the name of a user on %s who has full access to Citadel files\n" "(usually root)\n--> ", remote_host); getz(remote_user); + if (IsEmptyStr(remote_user)) + goto get_remote_user; printf("\nEstablishing an SSH connection to the source system...\n\n"); unlink(socket_path); @@ -200,6 +194,8 @@ int main(int argc, char *argv[]) } printf("ctdlmigrate will now begin a database migration...\n"); + printf(" if the system doesn't start working, \n"); + printf(" have a look at the syslog for pending jobs needing to be terminated.\n"); snprintf(cmd, sizeof cmd, "ssh -S %s %s@%s %s -w3600 MIGR export", socket_path, remote_user, remote_host, remote_sendcommand); @@ -248,38 +244,18 @@ FAIL: if (sourcefp) pclose(sourcefp); while ((fgets(buf, sizeof buf, sourcefp)) && (strcmp(buf, "000"))) { buf[strlen(buf)-1] = 0; - if (!strncasecmp(buf, "bio|", 4)) { - snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", - socket_path, remote_user, remote_host, &buf[4], ctdl_bio_dir); - } - else if (!strncasecmp(buf, "files|", 6)) { + if (!strncasecmp(buf, "files|", 6)) { snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", socket_path, remote_user, remote_host, &buf[6], ctdl_file_dir); } - else if (!strncasecmp(buf, "userpics|", 9)) { - snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", - socket_path, remote_user, remote_host, &buf[9], ctdl_usrpic_dir); - } else if (!strncasecmp(buf, "messages|", 9)) { snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", socket_path, remote_user, remote_host, &buf[9], ctdl_message_dir); } - else if (!strncasecmp(buf, "netconfigs|", 11)) { - snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", - socket_path, remote_user, remote_host, &buf[11], ctdl_netcfg_dir); - } else if (!strncasecmp(buf, "keys|", 5)) { snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", socket_path, remote_user, remote_host, &buf[5], ctdl_key_dir); } - else if (!strncasecmp(buf, "images|", 7)) { - snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", - socket_path, remote_user, remote_host, &buf[7], ctdl_image_dir); - } - else if (!strncasecmp(buf, "info|", 5)) { - snprintf(cmd, sizeof cmd, "rsync -va --rsh='ssh -S %s' %s@%s:%s/ %s/", - socket_path, remote_user, remote_host, &buf[5], ctdl_info_dir); - } else { strcpy(cmd, "false"); /* cheap and sleazy way to throw an error */ }