Skip to content

Commit 90fc114

Browse files
dgsgardmark
dgsga
authored andcommitted
Introduce experimental SQLite CNID backend, GitHub #1177
Based on the Netatalk MySQL CNID backend by Ralph Boehme. Adapted for SQLite by Christopher Kobayashi. Ported to Netatalk 3 by dgsga. Touched up for Netatalk 4 by Daniel Markstedt.
1 parent 6b6fd1f commit 90fc114

File tree

12 files changed

+1081
-3
lines changed

12 files changed

+1081
-3
lines changed

.github/workflows/build.yml

+13-2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ jobs:
7474
perl \
7575
pkgconfig \
7676
rpcsvc-proto-dev \
77+
sqlite-dev \
7778
talloc-dev \
7879
tracker \
7980
tracker-dev \
@@ -127,6 +128,7 @@ jobs:
127128
perl \
128129
pkgconfig \
129130
rpcsvc-proto \
131+
sqlite \
130132
talloc \
131133
tinysparql \
132134
unicode-character-database
@@ -183,6 +185,7 @@ jobs:
183185
libldap2-dev \
184186
libmariadb-dev \
185187
libpam0g-dev \
188+
libsqlite3-dev \
186189
libtalloc-dev \
187190
libtirpc-dev \
188191
libtracker-sparql-3.0-dev \
@@ -253,6 +256,7 @@ jobs:
253256
perl \
254257
perl-Net-DBus \
255258
quota-devel \
259+
sqlite-devel \
256260
systemd \
257261
systemtap-sdt-devel \
258262
tracker \
@@ -314,6 +318,7 @@ jobs:
314318
pam-devel \
315319
perl \
316320
pkg-config \
321+
sqlite3-devel \
317322
systemd \
318323
systemtap-sdt-devel \
319324
tcpd-devel \
@@ -424,7 +429,7 @@ jobs:
424429
- uses: actions/checkout@v4
425430
- name: Install dependencies
426431
run: |
427-
brew install berkeley-db cmark-gfm docbook-xsl libxslt meson mysql talloc
432+
brew install berkeley-db cmark-gfm docbook-xsl libxslt meson mysql sqlite talloc
428433
- name: Configure
429434
run: |
430435
meson setup build \
@@ -482,6 +487,7 @@ jobs:
482487
py39-gdbm \
483488
py39-sqlite3 \
484489
py39-tkinter \
490+
sqlite \
485491
talloc \
486492
tracker3
487493
run: |
@@ -525,6 +531,7 @@ jobs:
525531
p5-Net-DBus \
526532
perl5 \
527533
pkgconf \
534+
sqlite3 \
528535
talloc \
529536
tracker3
530537
run: |
@@ -580,6 +587,7 @@ jobs:
580587
p5-Net-DBus \
581588
perl \
582589
pkg-config \
590+
sqlite3 \
583591
talloc \
584592
tex-unicode-data
585593
run: |
@@ -635,6 +643,7 @@ jobs:
635643
openpam \
636644
p5-Net-DBus \
637645
pkgconf \
646+
sqlite \
638647
tracker3
639648
run: |
640649
set -e
@@ -682,6 +691,7 @@ jobs:
682691
libxslt \
683692
meson \
684693
mysql-client \
694+
sqlite3 \
685695
talloc
686696
run: |
687697
set -e
@@ -728,7 +738,8 @@ jobs:
728738
libgcrypt \
729739
ninja \
730740
pkg-config \
731-
python/pip
741+
python/pip \
742+
sqlite-3
732743
pip install meson
733744
run: |
734745
set -e

etc/afpd/afp_options.c

+3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ static void show_version( void )
8383
#endif
8484
#ifdef CNID_BACKEND_MYSQL
8585
printf( "mysql " );
86+
#endif
87+
#ifdef CNID_BACKEND_SQLITE
88+
printf( "sqlite " );
8689
#endif
8790
puts( "" );
8891
}

etc/cnid_dbd/cmd_dbd.c

+4-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,10 @@ int main(int argc, char **argv)
247247
}
248248

249249
/* open volume */
250-
if (STRCMP(vol->v_cnidscheme, != , "dbd") && STRCMP(vol->v_cnidscheme, != , "mysql")) {
250+
if (STRCMP(vol->v_cnidscheme, != , "dbd")
251+
&& STRCMP(vol->v_cnidscheme, != , "mysql")
252+
&& STRCMP(vol->v_cnidscheme, != , "sqlite")
253+
) {
251254
dbd_log(LOGSTD, "\"%s\" isn't a \"dbd\" CNID volume", vol->v_path);
252255
exit(EXIT_FAILURE);
253256
}

etc/cnid_dbd/meson.build

+4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ if use_dbd_backend
2323
cnid_dbd_deps += mysqlclient
2424
endif
2525

26+
if use_sqlite_backend
27+
cnid_dbd_deps += sqlite_deps
28+
endif
29+
2630
cnid_metad_sources = ['cnid_metad.c', 'usockfd.c', 'db_param.c']
2731

2832
dbd_sources = [

include/atalk/cnid_sqlite_private.h

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#ifndef _ATALK_CNID_SQLITE_PRIVATE_H
2+
#define _ATALK_CNID_SQLITE_PRIVATE_H 1
3+
4+
#include <atalk/cnid_private.h>
5+
#include <atalk/uuid.h>
6+
7+
#define CNID_SQLITE_FLAG_DEPLETED (1 << 0) /* CNID set overflowed */
8+
9+
typedef struct CNID_sqlite_private {
10+
struct vol *vol;
11+
uint32_t cnid_sqlite_flags;
12+
sqlite3 *cnid_sqlite_con;
13+
char *cnid_sqlite_voluuid_str;
14+
cnid_t cnid_sqlite_hint;
15+
sqlite3_stmt *cnid_lookup_stmt;
16+
sqlite3_stmt *cnid_add_stmt;
17+
sqlite3_stmt *cnid_put_stmt;
18+
} CNID_sqlite_private;
19+
20+
#endif

libatalk/cnid/cnid_init.c

+8
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ extern struct _cnid_module cnid_dbd_module;
4444
extern struct _cnid_module cnid_mysql_module;
4545
#endif
4646

47+
#ifdef CNID_BACKEND_SQLITE
48+
extern struct _cnid_module cnid_sqlite_module;
49+
#endif
50+
4751
void cnid_init(void)
4852
{
4953
#ifdef CNID_BACKEND_LAST
@@ -57,4 +61,8 @@ void cnid_init(void)
5761
#ifdef CNID_BACKEND_MYSQL
5862
cnid_register(&cnid_mysql_module);
5963
#endif
64+
65+
#ifdef CNID_BACKEND_SQLITE
66+
cnid_register(&cnid_sqlite_module);
67+
#endif
6068
}

libatalk/cnid/meson.build

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ if use_mysql_backend
1414
libcnid_deps += mysql_deps
1515
endif
1616

17+
if use_sqlite_backend
18+
subdir('sqlite')
19+
libcnid_libs += libcnid_sqlite
20+
libcnid_deps += sqlite_deps
21+
endif
22+
1723
cnid_sources = ['cnid_init.c', 'cnid.c']
1824

1925
libcnid = static_library(

0 commit comments

Comments
 (0)