Fixed Makefile and build systems to include man-pages. Added Alt-linux workflow. Fix rpm spec-file #3

Merged
zx merged 21 commits from zx into master 2025-04-16 10:36:34 +03:00
10 changed files with 176 additions and 86 deletions

65
.gitea/workflows/alt.yaml Normal file
View File

@ -0,0 +1,65 @@
name: Altlinux build
run-name: Deploy to ${{ inputs.deploy_target }} by @${{ github.actor }} 🚀
on:
- push
- workflow_dispatch
if: ${{ github.ref }} == 'refs/head/master'
jobs:
build-alt:
runs-on: alt-latest
branches:
- 'master'
steps:
- name: Checking environment
continue-on-error: true
run: printenv
- name: Installing prerequisites - update apt
run: apt-get update
- name: Installing prerequisites - install nodejs for actions & git
run: apt-get install -y git nodejs su
- name: Installing build environment
continue-on-error: true
run: |
apt-get install -y gcc rpm-build rpmlint make python gear hasher fakeroot patch rpmdevtools
- name: Installing needed software
run: apt-get install -y bison tcl
- name: Adding build user
run: useradd -d /builder -g users -m builder
- name: Fetching sources
uses: actions/checkout@v4
- name: Getting version info
run: |
echo "BFORCE_VER=$(cat ${{ env.GITHUB_WORKSPACE }}/source/.version)" >> $GITHUB_ENV
- name: Compressing source to tar.gz archive
run: |
tar -cvzf ../bforce-${{ env.BFORCE_VER }}.tar.gz -C ${{ env.GITHUB_WORKSPACE }}/.. bforce
cp -v ${{ env.GITHUB_WORKSPACE }}/rpm/bforce.spec /builder/
chown builder /builder/bforce.spec
echo '-------------------------------------------------------'
pwd
ls /builder
sed -i 's/^# %setup/%setup/' /builder/bforce.spec
- name: Building buildtree
run: |
su - builder -c "cd /builder && mkdir -pv rpmbuild/{RPMS,SRPMS,SOURCES,BUILD,SPECS}"
ls /builder -l
mkdir -pv /builder/rpmbuild/SOURCES
mv ${{ env.GITHUB_WORKSPACE }}/../bforce-${{ env.BFORCE_VER }}.tar.gz /builder/rpmbuild/SOURCES/
chown -R builder /builder/*
- name: Building binary and source RPM
run: |
su - builder -c 'rpmbuild -bb /builder/bforce.spec --define "_topdir /builder/rpmbuild"'
- name: Constructing artifact name and version
run: |
echo "BFORCE_VERLONG=$(cat ${{ env.GITHUB_WORKSPACE }}/source/.version)-$(date +%Y%M%d)" >> $GITHUB_ENV
- name: Retrieving artifact files
run: mkdir bforce && cp /builder/rpmbuild/RPMS/x86_64/bforce-*.rpm bforce
- name: Try to upload artifacts bin
uses: actions/upload-artifact@v3
with:
name: bforce-${{ env.BFORCE_VERLONG }}-Alt
path: /builder/rpmbuild/RPMS/x86_64
- name: Echo OK
run: echo "All OK"

View File

@ -1,5 +1,6 @@
![master branch](https://prj.zxalexis.ru/gitea/zx/bforce/actions/workflows/debpkg.yaml/badge.svg?branch=master)
![master branch](https://prj.zxalexis.ru/gitea/zx/bforce/actions/workflows/arch.yaml/badge.svg?branch=master)
![master branch](https://prj.zxalexis.ru/gitea/zx/bforce/actions/workflows/alt.yaml/badge.svg?branch=master)
BinkleyForce FTN mailer
-----------------------

View File

@ -1,54 +1,66 @@
Summary: Bforce, Fidonet mailer
Name: bforce
Version: 0.26.1
Release: 0
Release: %{_vendor}.1
Copyright: GPL
Group: Fidonet/mailer
Source0: bforce-%{version}.%{release}.tar.gz
Source0: bforce-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-root
%description
BFORCE is a FTN mailer. Supports PSTN and binkp sessions.
%prep
#%setup -q -n %{name}-%{version}.%{release}
cd source
./configure --prefix=/usr --disable-log-passwd --sysconfdir=/etc/bforce --bindir=/usr/bin --with-owner=uucp --with-group=news
# uncomment this to build from tarball
# %setup -q -n %{name}
echo "------------ PREPARING RPM BUILD IN $(pwd) ------------"
export RPM_PACKAGE_VERSION=$(cat %{_builddir}/%{name}/source/.version)
cd %{_builddir}/%{name}/source
%{_builddir}/%{name}/source/configure --prefix=/usr --disable-log-passwd --sysconfdir=/etc/bforce --bindir=/usr/bin --with-owner=uucp --with-group=news CFLAGS='-g1'
%build
cd source
echo "------------ BUILDING RPM IN $(pwd) ------------"
cd %{_builddir}/%{name}/source
make
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/etc/bforce
mkdir -p $RPM_BUILD_ROOT/usr/bin
mkdir -p $RPM_BUILD_ROOT/usr/sbin
mkdir -p $RPM_BUILD_ROOT/usr/share/man/man1
mkdir -p $RPM_BUILD_ROOT/var/log/bforce
mkdir -p $RPM_BUILD_ROOT/var/spool/fido/bt/pin
mkdir -p $RPM_BUILD_ROOT/var/spool/fido/bt/in
mkdir -p $RPM_BUILD_ROOT/var/spool/fido/ndl
mkdir -p $RPM_BUILD_ROOT/var/spool/fido/bforce
mkdir -p $RPM_BUILD_ROOT/$RPM_DOC_DIR/$RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
install -o uucp -g news source/bin/bforce $RPM_BUILD_ROOT/usr/bin/bforce
install -o uucp -g news source/bin/bfindex $RPM_BUILD_ROOT/usr/bin/bfindex
install -o uucp -g news source/bin/bfstat $RPM_BUILD_ROOT/usr/bin/bfstat
install -o uucp -g news source/bin/nlookup $RPM_BUILD_ROOT/usr/bin/nlookup
install -o uucp -g news examples/bforce.conf $RPM_BUILD_ROOT/etc/bforce/bforce.conf.sample
install -o uucp -g news examples/bforce.passwd $RPM_BUILD_ROOT/etc/bforce/bforce.passwd.sample
install -o uucp -g news examples/bforce.subst $RPM_BUILD_ROOT/etc/bforce/bforce.subst.sample
install -o uucp -g news examples/freq.aliases $RPM_BUILD_ROOT/etc/bforce/freq.aliases.sample
install -o uucp -g news examples/freq.dirs $RPM_BUILD_ROOT/etc/bforce/freq.dirs.sample
install -m755 -o uucp -g news contrib/outman $RPM_BUILD_ROOT/usr/bin/outman
install %{_builddir}/%{name}/source/bin/bforce $RPM_BUILD_ROOT/usr/bin/bforce
install %{_builddir}/%{name}/source/bin/bfindex $RPM_BUILD_ROOT/usr/bin/bfindex
install %{_builddir}/%{name}/source/bin/bfstat $RPM_BUILD_ROOT/usr/bin/bfstat
install %{_builddir}/%{name}/source/bin/nlookup $RPM_BUILD_ROOT/usr/bin/nlookup
install %{_builddir}/%{name}/examples/bforce.conf $RPM_BUILD_ROOT/etc/bforce/bforce.conf.sample
install %{_builddir}/%{name}/examples/bforce.passwd $RPM_BUILD_ROOT/etc/bforce/bforce.passwd.sample
install %{_builddir}/%{name}/examples/bforce.subst $RPM_BUILD_ROOT/etc/bforce/bforce.subst.sample
install %{_builddir}/%{name}/examples/freq.aliases $RPM_BUILD_ROOT/etc/bforce/freq.aliases.sample
install %{_builddir}/%{name}/examples/freq.dirs $RPM_BUILD_ROOT/etc/bforce/freq.dirs.sample
install %{_builddir}/%{name}/contrib/outman $RPM_BUILD_ROOT/usr/bin/outman
cp %{_builddir}/%{name}/man/*.1 $RPM_BUILD_ROOT/usr/share/man/man1/
cp %{_builddir}/%{name}/{README.md,CHANGES,COPYING,INSTALL,INSTALL.ru,SYSLOG,TODO} $RPM_BUILD_ROOT/$RPM_DOC_DIR/$RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION/
%clean
rm -rf $RPM_BUILD_ROOT
%files
%doc README README.kst CHANGES CHANGES.kst CHANGES.ugenk COPYING INSTALL.ru README.ugenk SYSLOG TODO
%{_mandir}/man1/bforce.1.xz
%{_mandir}/man1/bfindex.1.xz
%{_mandir}/man1/bfstat.1.xz
%{_mandir}/man1/nlookup.1.xz
%{_mandir}/man1/outman.1.xz
%defattr(-, root, root)
%attr(550,uucp,news) /usr/bin/bforce
@ -56,7 +68,7 @@ rm -rf $RPM_BUILD_ROOT
%attr(550,uucp,news) /usr/bin/bfstat
%attr(550,uucp,news) /usr/bin/nlookup
%attr(550,uucp,news) /usr/bin/outman
%attr(644,root,root) /usr/share/doc/bforce/*
%attr(644,root,root) /usr/share/doc/bforce-%{version}/*
%dir %attr(770,uucp,news) /var/log/bforce
%dir %attr(770,uucp,news) /var/spool/fido/ndl
%attr(775,uucp,news) /var/spool/fido/bt

View File

@ -13,13 +13,14 @@ CC = @CC@
INCLUDES = -I./include
CFLAGS = @CFLAGS@ -fno-builtin
LIBS = @LIBS@ @CLOCK_LIB@
YACC = @YACC@
YACC = @YACC@ -l
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
SRCDIR = @srcdir@
SRCDIRCONF = $(SRCDIR)/../examples
CONTRIBDIR = $(SRCDIR)/../contrib
CONTRIBMAN = $(SRCDIR)/../man
OWNER = @OWNER@
GROUP = @GROUP@
@ -27,6 +28,7 @@ CONFDIR = @sysconfdir@
BINDIR = @bindir@
LOGDIR = @LOGDIR@
SPOOLDIR = @SPOOLDIR@
MANDIR = @MANDIR@
DAEMON_LOGFILE = $(LOGDIR)/bf-daemon
BFORCE_LOGFILE = $(LOGDIR)/bf-log
@ -175,6 +177,7 @@ installdirs:
if [ ! -d $(SPOOLDIR)/bt/out ]; then mkdir -p $(SPOOLDIR)/bt/out; fi
if [ ! -d $(SPOOLDIR)/ndl ]; then mkdir -p $(SPOOLDIR)/ndl; fi
if [ ! -d $(SPOOLDIR)/bforce ]; then mkdir -p $(SPOOLDIR); fi
if [ ! -d $(MANDIR)/man1 ]; then mkdir -p $(MANDIR)/man1; fi
chown $(OWNER):$(GROUP) $(CONFDIR)
chown $(OWNER):$(GROUP) $(LOGDIR)
chown $(OWNER):$(GROUP) $(SPOOLDIR)/bt/in
@ -196,9 +199,16 @@ install-config:
$(INSTALL_DATA) -o $(OWNER) -g $(GROUP) $(SRCDIRCONF)/freq.aliases $(CONFDIR)/freq.aliases.sample
$(INSTALL_DATA) -o $(OWNER) -g $(GROUP) $(SRCDIRCONF)/freq.dirs $(CONFDIR)/freq.dirs.sample
install-man:
$(INSTALL) $(CONTRIBMAN)/bforce.1 $(MANDIR)/man1/bforce.1
$(INSTALL) $(CONTRIBMAN)/bfindex.1 $(MANDIR)/man1/bfindex.1
$(INSTALL) $(CONTRIBMAN)/bfstat.1 $(MANDIR)/man1/bforce.1
$(INSTALL) $(CONTRIBMAN)/nlookup.1 $(MANDIR)/man1/bforce.1
$(INSTALL) $(CONTRIBMAN)/outman.1 $(MANDIR)/man1/bforce.1
install-contrib:
$(INSTALL_PROGRAM) -o $(OWNER) -g $(GROUP) $(CONTRIBDIR)/outman $(BINDIR)/outman
@echo "Please, edit $(BINDIR)/outman"
install: install-bin install-config
install: install-bin install-config install-man

View File

@ -810,6 +810,7 @@ int daemon_pidfile(int cmd)
res = fscanf(pf, "%d", &hispid);
if (res != 1) {
log("daemon pidfile: not readable");
fclose(pf);
return -1;
}
@ -854,6 +855,7 @@ int daemon_pidfile(int cmd)
res = fscanf(pf, "%d", &hispid);
if (res != 1) {
log("daemon pidfile: not readable");
fclose(pf);
return -1;
}
@ -883,6 +885,7 @@ int daemon_pidfile(int cmd)
res = fscanf(pf, "%d", &hispid);
if (res != 1) {
log("daemon pidfile: not readable");
fclose(pf);
return -1;
}

View File

@ -32,7 +32,7 @@ int daemon_line_add(const char *name, int type)
int i;
for( i = 0; i < lines_num; i++ )
if( !strcmp(lines_tab[i].name, name) )
if( (lines_tab) && !strcmp(lines_tab[i].name, name) )
return i;
log("register new line \"%s\"", name);
@ -90,13 +90,12 @@ bool daemon_line_isready(const char *name)
void daemon_lines_deinit(void)
{
int i;
if( lines_tab )
{
for( i = 0; i < lines_num; i++ )
if( lines_tab[i].name )
free(lines_tab[i].name);
if( lines_tab )
{
free(lines_tab);
lines_tab = NULL;
}

View File

@ -67,7 +67,7 @@
/* First part of user prologue. */
#line 49 "expression.y"
#include "includes.h"
#include "confread.h"
@ -110,7 +110,7 @@ static int yyparse(void);
static int yyerror(const char *s);
#line 114 "expression.tab.c"
# ifndef YY_CAST
# ifdef __cplusplus
@ -1225,25 +1225,25 @@ yyreduce:
switch (yyn)
{
case 2: /* fullline: expression */
#line 94 "expression.y"
{
DEB((D_EVENT, "[yacc] expression return %d", yyvsp[0]));
expr_result = yyvsp[0];
}
#line 1231 "expression.tab.c"
break;
case 3: /* expression: elemexp */
#line 100 "expression.y"
{
DEB((D_EVENT, "[yacc] elemexp return %d", yyvsp[0]));
yyval = yyvsp[0];
}
#line 1240 "expression.tab.c"
break;
case 4: /* expression: NOT expression */
#line 105 "expression.y"
{
DEB((D_EVENT, "[yacc] not exprression %d", yyvsp[0]));
if( (yyvsp[0]) < 0 )
@ -1251,190 +1251,190 @@ yyreduce:
else
yyval = !(yyvsp[0]);
}
#line 1252 "expression.tab.c"
break;
case 5: /* expression: expression LOGOP expression */
#line 113 "expression.y"
{
yyval = expr_check_logic(yyvsp[-2], yyvsp[-1], yyvsp[0]);
}
#line 1260 "expression.tab.c"
break;
case 6: /* expression: OPENB expression CLOSEB */
#line 117 "expression.y"
{
DEB((D_EVENT, "eventexp: [yacc] backeted.expr %d", yyvsp[-1]));
yyval = yyvsp[-1];
}
#line 1269 "expression.tab.c"
break;
case 7: /* elemexp: INCOMING */
#line 123 "expression.y"
{
yyval = expr_check_incoming();
}
#line 1277 "expression.tab.c"
break;
case 8: /* elemexp: OUTGOING */
#line 127 "expression.y"
{
yyval = expr_check_outgoing();
}
#line 1285 "expression.tab.c"
break;
case 9: /* elemexp: LISTED */
#line 131 "expression.y"
{
yyval = expr_check_listed();
}
#line 1293 "expression.tab.c"
break;
case 10: /* elemexp: PROTECTED */
#line 135 "expression.y"
{
yyval = expr_check_protected();
}
#line 1301 "expression.tab.c"
break;
case 11: /* elemexp: FLAG flagstring */
#line 139 "expression.y"
{
yyval = yyvsp[0];
}
#line 1309 "expression.tab.c"
break;
case 12: /* elemexp: CONNSPEED AROP NUMBER */
#line 143 "expression.y"
{
if( state.valid && state.connspeed > 0 )
yyval = expr_check_arop(state.connspeed, yyvsp[-1], yyvsp[0]);
else
yyval = -1;
}
#line 1320 "expression.tab.c"
break;
case 13: /* elemexp: SPEED AROP NUMBER */
#line 150 "expression.y"
{
if( state.valid && state.node.speed > 0 )
yyval = expr_check_arop(state.node.speed, yyvsp[-1], yyvsp[0]);
else
yyval = -1;
}
#line 1331 "expression.tab.c"
break;
case 14: /* elemexp: TZ AROP NUMBER */
#line 157 "expression.y"
{
yyval = expr_check_arop(time_gmtoffset(), yyvsp[-1], yyvsp[0]);
}
#line 1339 "expression.tab.c"
break;
case 15: /* elemexp: PHONE TEXT */
#line 161 "expression.y"
{
yyval = expr_check_phone(expr_p_text);
}
#line 1347 "expression.tab.c"
break;
case 16: /* elemexp: TIME timestring */
#line 165 "expression.y"
{
yyval = yyvsp[0];
}
#line 1355 "expression.tab.c"
break;
case 17: /* elemexp: EXEC TEXT */
#line 169 "expression.y"
{
yyval = expr_check_exec(expr_p_text);
}
#line 1363 "expression.tab.c"
break;
case 18: /* elemexp: EXIST TEXT */
#line 173 "expression.y"
{
yyval = expr_check_exist(expr_p_text);
}
#line 1371 "expression.tab.c"
break;
case 19: /* elemexp: PORT TEXT */
#line 177 "expression.y"
{
yyval = expr_check_port(expr_p_text);
}
#line 1379 "expression.tab.c"
break;
case 20: /* elemexp: MAILER TEXT */
#line 181 "expression.y"
{
yyval = expr_check_mailer(expr_p_text);
}
#line 1387 "expression.tab.c"
break;
case 21: /* elemexp: TEXT */
#line 185 "expression.y"
{
yyval = expr_check_addr(expr_p_text);
if( yyval == -2 )
YYABORT;
}
#line 1397 "expression.tab.c"
break;
case 22: /* flagstring: TEXT */
#line 192 "expression.y"
{
yyval = expr_check_flag(expr_p_text);
}
#line 1405 "expression.tab.c"
break;
case 23: /* flagstring: TEXT COMMA flagstring */
#line 196 "expression.y"
{
yyval = expr_check_logic(yyvsp[-2], OR, yyvsp[0]);
}
#line 1413 "expression.tab.c"
break;
case 24: /* timestring: TEXT */
#line 201 "expression.y"
{
yyval = expr_check_time(expr_p_text);
if( yyval == -2 )
YYABORT;
}
#line 1423 "expression.tab.c"
break;
case 25: /* timestring: TEXT COMMA timestring */
#line 207 "expression.y"
{
yyval = expr_check_logic(yyvsp[-2], OR, yyvsp[0]);
}
#line 1431 "expression.tab.c"
break;
#line 1435 "expression.tab.c"
default: break;
}
@ -1627,7 +1627,7 @@ yyreturnlab:
return yyresult;
}
#line 211 "expression.y"
#include "expression_lex.c"

View File

@ -115,7 +115,7 @@ static void req_readfrlist(char *fname, s_frlist **frlist, int magic)
(*ptrl) = (s_frlist*)xmalloc(sizeof(s_frlist));
memset(*ptrl, '\0', sizeof(s_frlist));
if( path && *path ) (*ptrl)->path = xstrcpy(path);
if( *path ) (*ptrl)->path = xstrcpy(path);
if( !magic && *(path + strlen(path) - 1) != DIRSEPCHR )
{
/* add trailing DIRSEP ('/' or ..) to paths */

View File

@ -19,7 +19,7 @@
#define DEFAULT_PORT 60179 /* Birthday .. mother fucker :) */
struct addrinfo *ai = NULL;
struct addrinfo *paddrinfo = NULL;
static RETSIGTYPE tcpip_interrupt(int sig)
{
@ -171,7 +171,7 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
//aihints.ai_socktype = SOCK_STREAM;
aihints.ai_protocol = IPPROTO_TCP;
nameres = getaddrinfo ( host, port, &aihints, &ai );
nameres = getaddrinfo ( host, port, &aihints, &paddrinfo );
if ( nameres != 0 )
{
rc = 1;
@ -208,10 +208,10 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode)
if( host ) { free(host); host = NULL; }
DEB((D_INFO, "tcpip_connect: resolver got result!"));
aisave = ai;
aisave = paddrinfo;
if (rc == 0 )
rc = tcpip_connect2(ai);
rc = tcpip_connect2(paddrinfo);
freeaddrinfo( aisave );

View File

@ -3,7 +3,7 @@ dnl
dnl $Id$
dnl
#AC_INIT(bforce/bforce.c)
AC_INIT([bforce],[0.24.1],[zx@zxalexis.ru])
AC_INIT([bforce],[0.26.1],[zx@zxalexis.ru])
AC_CONFIG_HEADER(include/config.h)
AC_CANONICAL_SYSTEM
dnl # Minimum Autoconf version required.