# Bacula RPM spec file
-# Copyright (C) 2004 Kern Sibbald
+# Copyright (C) 2000-2005 Kern Sibbald
# Platform Build Configuration
%{?build_fc1:%define fc1 1}
%define fc3 0
%{?build_fc3:%define fc3 1}
+%define fc4 0
+%{?build_fc4:%define fc4 1}
# Whitebox Enterprise build
%define wb3 0
%{?build_wb3:%define wb3 1}
%{?build_rhel3:%define wb3 1}
%define rhel4 0
%{?build_rhel4:%define rhel4 1}
-%{?build_rhel4:%define fc3 1}
+%{?build_rhel4:%define fc4 1}
# CentOS build
%define centos4 0
%{?build_centos4:%define centos4 1}
-%{?build_centos4:%define fc3 1}
+%{?build_centos4:%define fc4 1}
# SuSE build
%define su9 0
%{?build_su9:%define su9 1}
%{?build_mdk:%define mdk 1}
# test for a platform definition
-%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{wb3} && ! %{su9} && ! %{mdk}
+%if ! %{rh7} && ! %{rh8} && ! %{rh9} && ! %{fc1} && ! %{fc3} && ! %{fc4} && ! %{wb3} && ! %{su9} && ! %{mdk}
%{error: You must specify a platform. Please examine the spec file.}
exit 1
%endif
%if %{centos4}
%define _dist %(grep CentOS /etc/redhat-release)
%endif
-%if %{fc3} && ! %{rhel4} && ! %{centos4}
+%if %{fc3} || %{fc4} && ! %{rhel4} && ! %{centos4}
%define _dist %(grep Fedora /etc/redhat-release)
%endif
%if %{wb3} && ! %{rhel3}
BuildRequires: glibc-static-devel
BuildRequires: freetype2-devel
%endif
-%if %{fc3}
+%if %{fc3} || %{fc4}
BuildRequires: libtermcap-devel
BuildRequires: gtk2-devel >= 2.4
BuildRequires: libgnomeui-devel >= 2.8
BuildRequires: GConf2-devel
BuildRequires: freetype-devel
%endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3}
+%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && !%{fc4}
BuildRequires: libtermcap-devel
BuildRequires: gtk2-devel >= 2.0
BuildRequires: libgnomeui-devel >= 2.0
Requires: GConf2
Requires: freetype2
%endif
-%if %{fc3}
+%if %{fc3} || %{fc4}
Requires: gtk2 >= 2.4
Requires: libgnomeui >= 2.8
Requires: glibc >= 2.3
Requires: GConf2
Requires: freetype
%endif
-%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3}
+%if ! %{rh7} && ! %{su9} && ! %{mdk} && ! %{fc3} && ! %{fc4}
Requires: gtk2 >= 2.0
Requires: libgnomeui >= 2.0
Requires: glibc >= 2.3
--enable-smartalloc \
--enable-gnome \
%if ! %{rh7} && ! %{rh8}
- --enable-tray-monitor \
+ --enable-tray-monitor \
%endif
%if %{mysql}
--with-mysql \
--with-working-dir=%{working_dir} \
--with-pid-dir=/var/run \
--with-subsys-dir=/var/lock/subsys \
- --with-dir-user=%{daemon_user} \
- --with-dir-group=%{daemon_group} \
- --with-sd-user=%{daemon_user} \
- --with-sd-group=%{daemon_group} \
- --with-fd-user=%{daemon_user} \
- --with-fd-group=%{daemon_group}
+ --with-dir-user=%{daemon_user} \
+ --with-dir-group=%{daemon_group} \
+ --with-sd-user=%{daemon_user} \
+ --with-sd-group=%{daemon_group} \
+ --with-fd-user=%{daemon_user} \
+ --with-fd-group=%{daemon_group}
make
%install
cp -p scripts/gnome-console.pamd $RPM_BUILD_ROOT/etc/pam.d/gnome-console
ln -sf consolehelper $RPM_BUILD_ROOT/usr/bin/gnome-console
%endif
-%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{mdk}
+%if %{rh8} || %{rh9} || %{wb3} || %{fc1} || %{fc3} || %{fc4} || %{mdk}
cp -p scripts/bacula.png $RPM_BUILD_ROOT/usr/share/pixmaps/bacula.png
cp -p scripts/bacula.desktop.gnome2.consolehelper $RPM_BUILD_ROOT/usr/share/applications/bacula.desktop
cp -p scripts/gnome-console.console_apps $RPM_BUILD_ROOT/etc/security/console.apps/gnome-console
DB_VER=`mysql 2>/dev/null bacula -e 'select * from Version;'|tail -n 1`
if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
- echo "This bacula upgrade will update a bacula database from version 8 to 9."
- echo "You appear to be running database version $DB_VER. You must first update"
- echo "your database to version 8 and then install this upgrade. The alternative"
- echo "is to use /etc/bacula/drop_mysql_tables to delete all your your current"
- echo "catalog information, then do the upgrade. Information on updating a"
- echo "database older than version 8 can be found in the release notes."
- exit 1
+ echo "This bacula upgrade will update a bacula database from version 8 to 9."
+ echo "You appear to be running database version $DB_VER. You must first update"
+ echo "your database to version 8 and then install this upgrade. The alternative"
+ echo "is to use /etc/bacula/drop_mysql_tables to delete all your your current"
+ echo "catalog information, then do the upgrade. Information on updating a"
+ echo "database older than version 8 can be found in the release notes."
+ exit 1
fi
# check for and copy /etc/bacula/console.conf to bconsole.conf
if [ -s /etc/bacula/console.conf ];then
- cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
+ cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
fi
%post mysql
# grant privileges and create tables if they do not exist
if [ -z "$DB_VER" ]; then
- echo "Hmm, doesn't look like you have an existing database."
- echo "Granting privileges for MySQL user bacula..."
- /etc/bacula/grant_mysql_privileges
- echo "Creating MySQL bacula database..."
- /etc/bacula/create_mysql_database
- echo "Creating bacula tables..."
- /etc/bacula/make_mysql_tables
+ echo "Hmm, doesn't look like you have an existing database."
+ echo "Granting privileges for MySQL user bacula..."
+ /etc/bacula/grant_mysql_privileges
+ echo "Creating MySQL bacula database..."
+ /etc/bacula/create_mysql_database
+ echo "Creating bacula tables..."
+ /etc/bacula/make_mysql_tables
# check to see if we need to upgrade a 1.36 or lower database
elif [ "$DB_VER" -lt "9" ]; then
- echo "This release requires an upgrade to your bacula database."
- echo "Backing up your current database..."
- mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2
- echo "Upgrading bacula database ..."
- /etc/bacula/update_mysql_tables
- echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
+ echo "This release requires an upgrade to your bacula database."
+ echo "Backing up your current database..."
+ mysqldump -f --opt bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2
+ echo "Upgrading bacula database ..."
+ /etc/bacula/update_mysql_tables
+ echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
fi
# create the daemon group
HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
if [ -z $HAVE_BACULA ]; then
- %{groupadd} -r %{daemon_group} > /dev/null 2>&1
- echo "The group %{daemon_group} has been added to %{group_file}."
- echo "See the manual chapter Running Bacula for details."
+ %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+ echo "The group %{daemon_group} has been added to %{group_file}."
+ echo "See the manual chapter Running Bacula for details."
fi
%preun mysql
%pre sqlite
# test for bacula database older than version 8
if [ -s %{working_dir}/bacula.db ] && [ -s %{sqlite_bindir}/sqlite ];then
- DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
- if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
- echo "This bacula upgrade will update a bacula database from version 8 to 9."
- echo "You appear to be running database version $DB_VER. You must first update"
- echo "your database to version 8 and then install this upgrade. The alternative"
- echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
- echo "catalog information, then do the upgrade. Information on updating a"
- echo "database older than version 8 can be found in the release notes."
- exit 1
- fi
+ DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
+ if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
+ echo "This bacula upgrade will update a bacula database from version 8 to 9."
+ echo "You appear to be running database version $DB_VER. You must first update"
+ echo "your database to version 8 and then install this upgrade. The alternative"
+ echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
+ echo "catalog information, then do the upgrade. Information on updating a"
+ echo "database older than version 8 can be found in the release notes."
+ exit 1
+ fi
fi
# check for and copy /etc/bacula/console.conf to bconsole.conf
if [ -s /etc/bacula/console.conf ];then
- cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
+ cp -p /etc/bacula/console.conf /etc/bacula/bconsole.conf
fi
%post sqlite
# test for an existing database
if [ -s %{working_dir}/bacula.db ]; then
- DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
- # check to see if we need to upgrade a 1.36 or lower database
- if [ "$DB_VER" -lt "8" ]; then
- echo "This bacula upgrade requires a database update to version 9. You appear to"
- echo "be running database version $DB_VER. You must update your database using the"
- echo "upgrade scripts in the bacula-updatedb package. The alternative"
- echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
- echo "catalog information, then /etc/bacula/make_sqlite_tables. Information on updating a"
- echo "database older than version 8 can be found in the release notes."
- fi
-
- if [ "$DB_VER" -lt "9" ] && [ "$DB_VER" -ge "8" ]; then
- echo "This release requires an upgrade to your bacula database."
- echo "Backing up your current database..."
- echo ".dump" | %{sqlite_bindir}/sqlite %{working_dir}/bacula.db | bzip2 > %{working_dir}/bacula_backup.sql.bz2
- echo "Upgrading bacula database ..."
- /etc/bacula/update_sqlite_tables
- echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
- fi
+ DB_VER=`echo "select * from Version;" | %{sqlite_bindir}/sqlite 2>/dev/null %{working_dir}/bacula.db | tail -n 1`
+ # check to see if we need to upgrade a 1.36 or lower database
+ if [ "$DB_VER" -lt "8" ]; then
+ echo "This bacula upgrade requires a database update to version 9. You appear to"
+ echo "be running database version $DB_VER. You must update your database using the"
+ echo "upgrade scripts in the bacula-updatedb package. The alternative"
+ echo "is to use /etc/bacula/drop_sqlite_tables to delete all your your current"
+ echo "catalog information, then /etc/bacula/make_sqlite_tables. Information on updating a"
+ echo "database older than version 8 can be found in the release notes."
+ fi
+
+ if [ "$DB_VER" -lt "9" ] && [ "$DB_VER" -ge "8" ]; then
+ echo "This release requires an upgrade to your bacula database."
+ echo "Backing up your current database..."
+ echo ".dump" | %{sqlite_bindir}/sqlite %{working_dir}/bacula.db | bzip2 > %{working_dir}/bacula_backup.sql.bz2
+ echo "Upgrading bacula database ..."
+ /etc/bacula/update_sqlite_tables
+ echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
+ fi
else
- # create the database and tables
- echo "Hmm, doesn't look like you have an existing database."
- echo "Creating SQLite database..."
- /etc/bacula/create_sqlite_database
- echo "Creating the SQLite tables..."
- /etc/bacula/make_sqlite_tables
+ # create the database and tables
+ echo "Hmm, doesn't look like you have an existing database."
+ echo "Creating SQLite database..."
+ /etc/bacula/create_sqlite_database
+ echo "Creating the SQLite tables..."
+ /etc/bacula/make_sqlite_tables
fi
# create the daemon group
HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
if [ -z $HAVE_BACULA ]; then
- %{groupadd} -r %{daemon_group} > /dev/null 2>&1
- echo "The group %{daemon_group} has been added to %{group_file}."
- echo "See the manual chapter Running Bacula for details."
+ %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+ echo "The group %{daemon_group} has been added to %{group_file}."
+ echo "See the manual chapter Running Bacula for details."
fi
%preun sqlite
DB_VER=`echo 'select * from Version;' | psql bacula 2>/dev/null | tail -3 | head -1`
if [ -n "$DB_VER" ] && [ "$DB_VER" -lt "8" ]; then
- echo "This bacula upgrade will update a bacula database from version 8 to 9."
- echo "You appear to be running database version $DB_VER. You must first update"
- echo "your database to version 8 and then install this upgrade. The alternative"
- echo "is to use /etc/bacula/drop_postgresql_tables to delete all your your current"
- echo "catalog information, then do the upgrade. Information on updating a"
- echo "database older than version 8 can be found in the release notes."
- exit 1
+ echo "This bacula upgrade will update a bacula database from version 8 to 9."
+ echo "You appear to be running database version $DB_VER. You must first update"
+ echo "your database to version 8 and then install this upgrade. The alternative"
+ echo "is to use /etc/bacula/drop_postgresql_tables to delete all your your current"
+ echo "catalog information, then do the upgrade. Information on updating a"
+ echo "database older than version 8 can be found in the release notes."
+ exit 1
fi
%post postgresql
# grant privileges and create tables if they do not exist
if [ -z "$DB_VER" ]; then
- echo "Hmm, doesn't look like you have an existing database."
- echo "Creating PostgreSQL bacula database..."
- /etc/bacula/create_postgresql_database
- echo "Creating bacula tables..."
- /etc/bacula/make_postgresql_tables
- echo "Granting privileges for PostgreSQL user bacula..."
- /etc/bacula/grant_postgresql_privileges
+ echo "Hmm, doesn't look like you have an existing database."
+ echo "Creating PostgreSQL bacula database..."
+ /etc/bacula/create_postgresql_database
+ echo "Creating bacula tables..."
+ /etc/bacula/make_postgresql_tables
+ echo "Granting privileges for PostgreSQL user bacula..."
+ /etc/bacula/grant_postgresql_privileges
# check to see if we need to upgrade a 1.36 or lower database
elif [ "$DB_VER" -lt "9" ]; then
- echo "This release requires an upgrade to your bacula database."
- echo "Backing up your current database..."
- pg_dump bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2
- echo "Upgrading bacula database ..."
- /etc/bacula/update_postgresql_tables
- echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
-
+ echo "This release requires an upgrade to your bacula database."
+ echo "Backing up your current database..."
+ pg_dump bacula | bzip2 > %{working_dir}/bacula_backup.sql.bz2
+ echo "Upgrading bacula database ..."
+ /etc/bacula/update_postgresql_tables
+ echo "If bacula works correctly you can remove the backup file %{working_dir}/bacula_backup.sql.bz2"
+
fi
# create the daemon group
HAVE_BACULA=`grep %{daemon_group} %{group_file} 2>/dev/null`
if [ -z $HAVE_BACULA ]; then
- %{groupadd} -r %{daemon_group} > /dev/null 2>&1
- echo "The group %{daemon_group} has been added to %{groupfile}."
- echo "See the manual chapter Running Bacula for details."
+ %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+ echo "The group %{daemon_group} has been added to %{groupfile}."
+ echo "See the manual chapter Running Bacula for details."
fi
-
+
%preun postgresql
# delete our links
# create the daemon group
HAVE_BACULA=`cat %{group_file} | grep %{daemon_group} 2>/dev/null`
if [ -z $HAVE_BACULA ]; then
- %{groupadd} -r %{daemon_group} > /dev/null 2>&1
- echo "The group %{daemon_group} has been added to %{group_file}."
- echo "See the manual chapter Running Bacula for details."
+ %{groupadd} -r %{daemon_group} > /dev/null 2>&1
+ echo "The group %{daemon_group} has been added to %{group_file}."
+ echo "See the manual chapter Running Bacula for details."
fi
%preun client
{
int sfd;
ssize_t stat;
+ bool ok = false;
POOLMEM *fname = get_pool_memory(PM_FNAME);
struct s_state_hdr hdr;
int hdr_size = sizeof(hdr);
if ((sfd = open(fname, O_RDONLY|O_BINARY, 0)) < 0) {
Dmsg3(010, "Could not open state file. sfd=%d size=%d: ERR=%s\n",
sfd, sizeof(hdr), strerror(errno));
- goto bail_out;
+ goto bail_out;
}
if ((stat=read(sfd, &hdr, hdr_size)) != hdr_size) {
Dmsg4(010, "Could not read state file. sfd=%d stat=%d size=%d: ERR=%s\n",
goto bail_out;
}
// Dmsg1(010, "Read header of %d bytes.\n", sizeof(hdr));
- read_last_jobs_list(sfd, hdr.last_jobs_addr);
+ if (!read_last_jobs_list(sfd, hdr.last_jobs_addr)) {
+ goto bail_out;
+ }
+ ok = true;
bail_out:
if (sfd >= 0) {
close(sfd);
}
+ if (!ok) {
+ unlink(fname);
+ }
free_pool_memory(fname);
}
void write_state_file(char *dir, const char *progname, int port)
{
int sfd;
+ bool ok = false;
POOLMEM *fname = get_pool_memory(PM_FNAME);
Mmsg(&fname, "%s/%s.%d.state", dir, progname, port);
/* Create new state file */
if ((sfd = open(fname, O_CREAT|O_WRONLY|O_BINARY, 0640)) < 0) {
- Dmsg2(000, "Could not create state file. %s ERR=%s\n", fname, strerror(errno));
- Emsg2(M_ERROR, 0, _("Could not create state file. %s ERR=%s\n"), fname, strerror(errno));
+ berrno be;
+ Dmsg2(000, "Could not create state file. %s ERR=%s\n", fname, be.strerror());
+ Emsg2(M_ERROR, 0, _("Could not create state file. %s ERR=%s\n"), fname, be.strerror());
goto bail_out;
}
if (write(sfd, &state_hdr, sizeof(state_hdr)) != sizeof(state_hdr)) {
- Dmsg1(000, "Write hdr error: ERR=%s\n", strerror(errno));
+ berrno be;
+ Dmsg1(000, "Write hdr error: ERR=%s\n", be.strerror());
goto bail_out;
}
// Dmsg1(010, "Wrote header of %d bytes\n", sizeof(state_hdr));
state_hdr.reserved[0] = write_last_jobs_list(sfd, state_hdr.last_jobs_addr);
// Dmsg1(010, "write last job end = %d\n", (int)state_hdr.reserved[0]);
if (lseek(sfd, 0, SEEK_SET) < 0) {
- Dmsg1(000, "lseek error: ERR=%s\n", strerror(errno));
+ berrno be;
+ Dmsg1(000, "lseek error: ERR=%s\n", be.strerror());
goto bail_out;
}
if (write(sfd, &state_hdr, sizeof(state_hdr)) != sizeof(state_hdr)) {
- Pmsg1(000, _("Write final hdr error: ERR=%s\n"), strerror(errno));
+ berrno be;
+ Pmsg1(000, _("Write final hdr error: ERR=%s\n"), be.strerror());
+ goto bail_out;
}
+ ok = true;
// Dmsg1(010, "rewrote header = %d\n", sizeof(state_hdr));
bail_out:
if (sfd >= 0) {
close(sfd);
}
+ if (!ok) {
+ unlink(fname);
+ }
free_pool_memory(fname);
}
/* Zero the fdset, we'll set our fd prior to each invocation of select() */
FD_ZERO(&fdset);
- tv.tv_sec = 10;
- tv.tv_usec = 0;
fdmax = bsock->fd + 1;
/* Ensure that socket is non-blocking */
/* Handle errors */
switch (SSL_get_error(tls->openssl, err)) {
- case SSL_ERROR_NONE:
- stat = true;
- goto cleanup;
- case SSL_ERROR_ZERO_RETURN:
- /* TLS connection was cleanly shut down */
- openssl_post_errors(M_ERROR, _("Connect failure"));
- stat = false;
- goto cleanup;
- case SSL_ERROR_WANT_READ:
- /* If we timeout of a select, this will be unset */
- FD_SET((unsigned) bsock->fd, &fdset);
- /* Block until we can read */
- select(fdmax, &fdset, NULL, &fdset, &tv);
- break;
- case SSL_ERROR_WANT_WRITE:
- /* If we timeout of a select, this will be unset */
- FD_SET((unsigned) bsock->fd, &fdset);
- /* Block until we can write */
- select(fdmax, NULL, &fdset, &fdset, &tv);
- break;
- default:
- /* Socket Error Occured */
- openssl_post_errors(M_ERROR, _("Connect failure"));
- stat = false;
- goto cleanup;
+ case SSL_ERROR_NONE:
+ stat = true;
+ goto cleanup;
+ case SSL_ERROR_ZERO_RETURN:
+ /* TLS connection was cleanly shut down */
+ openssl_post_errors(M_ERROR, _("Connect failure"));
+ stat = false;
+ goto cleanup;
+ case SSL_ERROR_WANT_READ:
+ /* If we timeout of a select, this will be unset */
+ FD_SET((unsigned) bsock->fd, &fdset);
+ /* Set our timeout */
+ tv.tv_sec = 10;
+ tv.tv_usec = 0;
+ /* Block until we can read */
+ select(fdmax, &fdset, NULL, &fdset, &tv);
+ break;
+ case SSL_ERROR_WANT_WRITE:
+ /* If we timeout of a select, this will be unset */
+ FD_SET((unsigned) bsock->fd, &fdset);
+ /* Set our timeout */
+ tv.tv_sec = 10;
+ tv.tv_usec = 0;
+ /* Block until we can write */
+ select(fdmax, NULL, &fdset, &fdset, &tv);
+ break;
+ default:
+ /* Socket Error Occured */
+ openssl_post_errors(M_ERROR, _("Connect failure"));
+ stat = false;
+ goto cleanup;
}
if (bsock->timed_out) {
/* Zero the fdset, we'll set our fd prior to each invocation of select() */
FD_ZERO(&fdset);
- tv.tv_sec = 10;
- tv.tv_usec = 0;
fdmax = bsock->fd + 1;
/* Ensure that socket is non-blocking */
/* Handle errors */
switch (SSL_get_error(tls->openssl, nwritten)) {
- case SSL_ERROR_NONE:
- nleft -= nwritten;
- if (nleft) {
- ptr += nwritten;
- }
- break;
- case SSL_ERROR_ZERO_RETURN:
- /* TLS connection was cleanly shut down */
- openssl_post_errors(M_ERROR, _("TLS read/write failure."));
- goto cleanup;
- case SSL_ERROR_WANT_READ:
- /* If we timeout of a select, this will be unset */
- FD_SET((unsigned) bsock->fd, &fdset);
- /* Block until we can read */
- select(fdmax, &fdset, NULL, &fdset, &tv);
- break;
- case SSL_ERROR_WANT_WRITE:
- /* If we timeout of a select, this will be unset */
- FD_SET((unsigned) bsock->fd, &fdset);
- /* Block until we can write */
- select(fdmax, NULL, &fdset, &fdset, &tv);
- break;
- default:
- /* Socket Error Occured */
- openssl_post_errors(M_ERROR, _("TLS read/write failure."));
- goto cleanup;
+ case SSL_ERROR_NONE:
+ nleft -= nwritten;
+ if (nleft) {
+ ptr += nwritten;
+ }
+ break;
+ case SSL_ERROR_ZERO_RETURN:
+ /* TLS connection was cleanly shut down */
+ openssl_post_errors(M_ERROR, _("TLS read/write failure."));
+ goto cleanup;
+ case SSL_ERROR_WANT_READ:
+ /* If we timeout of a select, this will be unset */
+ FD_SET((unsigned) bsock->fd, &fdset);
+ tv.tv_sec = 10;
+ tv.tv_usec = 0;
+ /* Block until we can read */
+ select(fdmax, &fdset, NULL, &fdset, &tv);
+ break;
+ case SSL_ERROR_WANT_WRITE:
+ /* If we timeout of a select, this will be unset */
+ FD_SET((unsigned) bsock->fd, &fdset);
+ tv.tv_sec = 10;
+ tv.tv_usec = 0;
+ /* Block until we can write */
+ select(fdmax, NULL, &fdset, &fdset, &tv);
+ break;
+ default:
+ /* Socket Error Occured */
+ openssl_post_errors(M_ERROR, _("TLS read/write failure."));
+ goto cleanup;
}
/* Everything done? */