Skip to content

Commit f4a1087

Browse files
committed
Merge commit '43ee1c6c1355c92e9d8c96fb97d816fa0d6e9950'
2 parents 6a602e7 + 43ee1c6 commit f4a1087

File tree

15 files changed

+300
-98
lines changed

15 files changed

+300
-98
lines changed

contrib/mport/libexec/mport.list/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ MK_MAN= no
77

88
LIBADD= mport pthread
99

10-
LDFLAGS += -L../libmport -lmport -lpthread
10+
LDFLAGS += -L${.CURDIR}/../../libmport -lmport -lpthread
1111

1212
BINDIR=/usr/libexec
1313

contrib/mport/libexec/mport.list/mport.list.c

Lines changed: 27 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
#include <unistd.h>
3838
#include <getopt.h>
3939
#include <mport.h>
40+
#include <mport_private.h>
4041

4142
static void usage(void);
42-
static char * str_remove(const char *, const char);
4343

4444
int
4545
main(int argc, char *argv[])
@@ -134,37 +134,37 @@ main(int argc, char *argv[])
134134
while (*packs != NULL) {
135135
if (update) {
136136
if (mport_index_lookup_pkgname(mport, (*packs)->name, &indexEntries) != MPORT_OK) {
137-
(void) fprintf(stderr, "Error Looking up package name %s: %d %s\n", (*packs)->name, mport_err_code(), mport_err_string());
137+
mport_call_msg_cb(mport, "Error Looking up package name %s: %d %s", (*packs)->name, mport_err_code(), mport_err_string());
138138
exit(mport_err_code());
139139
}
140140

141141
if (indexEntries == NULL || *indexEntries == NULL) {
142142
if (mport_moved_lookup(mport, (*packs)->name, &movedEntries) != MPORT_OK) {
143-
(void) printf("%-25s %8s is not part of the package repository.\n", (*packs)->name, (*packs)->version);
143+
mport_call_msg_cb(mport,"%-25s %8s is not part of the package repository.", (*packs)->name, (*packs)->version);
144144
packs++;
145145
continue;
146146
}
147147

148148
if (movedEntries == NULL || *movedEntries == NULL) {
149-
(void) printf("%-15s %8s is not part of the package repository.\n", (*packs)->name, (*packs)->version);
150-
packs++;
151-
continue;
152-
}
149+
mport_call_msg_cb(mport,"%-15s %8s is not part of the package repository.", (*packs)->name, (*packs)->version);
150+
packs++;
151+
continue;
152+
}
153153

154154
if ((*movedEntries)->moved_to[0]!= '\0') {
155-
(void) printf("%-25s %8s was moved to %s\n", (*packs)->name, (*packs)->version, (*movedEntries)->moved_to);
155+
mport_call_msg_cb(mport,"%-25s %8s was moved to %s", (*packs)->name, (*packs)->version, (*movedEntries)->moved_to);
156156
free(movedEntries);
157157
movedEntries = NULL;
158-
packs++;
159-
continue;
158+
packs++;
159+
continue;
160160
}
161161

162162
if ((*movedEntries)->date[0]!= '\0') {
163-
(void) printf("%-25s %8s expired on %s\n", (*packs)->name, (*packs)->version, (*movedEntries)->date);
163+
mport_call_msg_cb(mport,"%-25s %8s expired on %s", (*packs)->name, (*packs)->version, (*movedEntries)->date);
164164
free(movedEntries);
165165
movedEntries = NULL;
166-
packs++;
167-
continue;
166+
packs++;
167+
continue;
168168
}
169169

170170
free(movedEntries);
@@ -176,41 +176,39 @@ main(int argc, char *argv[])
176176
if (((*indexEntries)->version != NULL && mport_version_cmp((*packs)->version, (*indexEntries)->version) < 0)
177177
|| ((*packs)->version != NULL && mport_version_cmp((*packs)->os_release, os_release) < 0)) {
178178

179-
if (verbose) {
180-
(void) printf("%-25s %8s (%s) < %-s\n", (*packs)->name, (*packs)->version,
181-
(*packs)->os_release, (*indexEntries)->version);
182-
} else {
183-
(void) printf("%-25s %8s < %-8s\n", (*packs)->name, (*packs)->version,
184-
(*indexEntries)->version);
185-
}
179+
if (verbose) {
180+
mport_call_msg_cb(mport,"%-25s %8s (%s) < %-s", (*packs)->name, (*packs)->version, (*packs)->os_release, (*indexEntries)->version);
181+
} else {
182+
mport_call_msg_cb(mport,"%-25s %8s < %-8s", (*packs)->name, (*packs)->version, (*indexEntries)->version);
183+
}
186184
}
187185
indexEntries++;
188186
}
189187

190188
mport_index_entry_free_vec(iestart);
191189
indexEntries = NULL;
192190
} else if (verbose) {
193-
comment = str_remove((*packs)->comment, '\\');
191+
comment = mport_str_remove((*packs)->comment, '\\');
194192
snprintf(name_version, 30, "%s-%s", (*packs)->name, (*packs)->version);
195193

196-
(void) printf("%-30s\t%6s\t%s\n", name_version, (*packs)->os_release, comment);
194+
mport_call_msg_cb(mport,"%-30s\t%6s\t%s", name_version, (*packs)->os_release, comment);
197195
free(comment);
198196
}
199-
else if (prime && (*packs)->automatic == 0)
200-
(void) printf("%s\n", (*packs)->name);
197+
else if (prime && (*packs)->automatic == 0)
198+
mport_call_msg_cb(mport,"%s", (*packs)->name);
201199
else if (quiet && !origin)
202-
(void) printf("%s\n", (*packs)->name);
200+
mport_call_msg_cb(mport,"%s", (*packs)->name);
203201
else if (quiet && origin)
204-
(void) printf("%s\n", (*packs)->origin);
202+
mport_call_msg_cb(mport,"%s", (*packs)->origin);
205203
else if (origin)
206-
(void) printf("Information for %s-%s:\n\nOrigin:\n%s\n\n",
204+
mport_call_msg_cb(mport,"Information for %s-%s:\n\nOrigin:\n%s\n",
207205
(*packs)->name, (*packs)->version, (*packs)->origin);
208206
else if (locks) {
209207
if ((*packs)->locked == 1)
210-
(void) printf("%s-%s\n", (*packs)->name, (*packs)->version);
208+
mport_call_msg_cb(mport,"%s-%s", (*packs)->name, (*packs)->version);
211209

212210
} else
213-
(void) printf("%s-%s\n", (*packs)->name, (*packs)->version);
211+
mport_call_msg_cb(mport, "%s-%s", (*packs)->name, (*packs)->version);
214212
packs++;
215213
}
216214

@@ -219,34 +217,6 @@ main(int argc, char *argv[])
219217
return (0);
220218
}
221219

222-
223-
static char *
224-
str_remove( const char *str, const char ch )
225-
{
226-
size_t i;
227-
size_t x;
228-
size_t len;
229-
char *output;
230-
231-
if (str == NULL)
232-
return NULL;
233-
234-
len = strlen(str);
235-
236-
output = calloc(len + 1, sizeof(char));
237-
238-
for (i = 0, x = 0; i <= len; i++) {
239-
if (str[i] != ch) {
240-
output[x] = str[i];
241-
x++;
242-
}
243-
}
244-
output[len] = '\0';
245-
246-
return (output);
247-
}
248-
249-
250220
static void
251221
usage(void)
252222
{

contrib/mport/libmport/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ SRCS= asset.c bundle_write.c bundle_read.c plist.c create_primative.c db.c \
99
update_primative.c bundle_read_update_pkg.c pkgmeta.c \
1010
fetch.c index.c index_depends.c install.c clean.c setting.c \
1111
stats.c update.c upgrade.c verify.c lock.c mkdir.c import_export.c \
12-
autoremove.c audit.c ping.c message.c
12+
autoremove.c audit.c ping.c message.c service.c
1313
INCS= mport.h
1414

15-
CFLAGS+= -I${.CURDIR} -I/usr/include/private/ucl
15+
CFLAGS+= -I${.CURDIR} -I/usr/include/private/ucl -I/usr/include/ucl
1616
SHLIB_MAJOR= 2
1717
MAN= mport.3
1818

contrib/mport/libmport/bundle_read_install_pkg.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,17 @@ do_pre_install(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta *
126126

127127
(void) strlcpy(cwd, pkg->prefix, sizeof(cwd));
128128

129-
if (mport_chdir(mport, cwd) != MPORT_OK)
130-
goto ERROR;
129+
if (mport_chdir(mport, cwd) != MPORT_OK) {
130+
if (strcmp("/compat/linux", cwd) == 0) {
131+
mport_mkdir("/compat");
132+
mport_mkdir("/compat/linux");
133+
} else {
134+
mport_mkdir(cwd);
135+
}
136+
if (mport_chdir(mport, cwd) != MPORT_OK) {
137+
goto ERROR;
138+
}
139+
}
131140

132141
STAILQ_FOREACH(e, alist, next)
133142
{
@@ -324,8 +333,8 @@ mport_bundle_read_get_assetlist(mportInstance *mport, mportPackageMeta *pkg, mpo
324333
}
325334
} else if (state == POSTINSTALL) {
326335
if (mport_db_prepare(mport->db, &stmt,
327-
"SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type in (%d, %d, %d, %d, %d, %d)",
328-
pkg->name, ASSET_CWD, ASSET_POSTEXEC, ASSET_LDCONFIG, ASSET_LDCONFIG_LINUX, ASSET_GLIB_SCHEMAS, ASSET_INFO) != MPORT_OK) {
336+
"SELECT type,data,checksum,owner,grp,mode FROM stub.assets WHERE pkg=%Q and type in (%d, %d, %d, %d, %d, %d, %d)",
337+
pkg->name, ASSET_CWD, ASSET_POSTEXEC, ASSET_LDCONFIG, ASSET_LDCONFIG_LINUX, ASSET_GLIB_SCHEMAS, ASSET_INFO, ASSET_TOUCH) != MPORT_OK) {
329338
sqlite3_finalize(stmt);
330339
RETURN_CURRENT_ERROR;
331340
}
@@ -854,6 +863,8 @@ do_post_install(mportInstance *mport, mportBundleRead *bundle, mportPackageMeta
854863
if (run_pkg_install(mport, bundle, pkg, "POST-INSTALL") != MPORT_OK)
855864
RETURN_CURRENT_ERROR;
856865

866+
mport_start_stop_service(mport, pack, SERVICE_START);
867+
857868
return mark_complete(mport, pkg);
858869
}
859870

@@ -933,6 +944,10 @@ run_postexec(mportInstance *mport, mportPackageMeta *pkg)
933944
goto ERROR;
934945
}
935946
break;
947+
case ASSET_TOUCH:
948+
if (mport_xsystem(mport, "/usr/bin/touch %s", file)!= MPORT_OK) {
949+
goto ERROR;
950+
}
936951
default:
937952
/* do nothing */
938953
break;

contrib/mport/libmport/db.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ static int mport_upgrade_master_schema_7to8(sqlite3 *);
4242
static int mport_upgrade_master_schema_8to9(sqlite3 *);
4343
static int mport_upgrade_master_schema_9to10(sqlite3 *);
4444
static int mport_upgrade_master_schema_10to11(sqlite3 *);
45+
static int mport_upgrade_master_schema_11to12(sqlite3 *);
4546

4647
/* mport_db_do(sqlite3 *db, const char *sql, ...)
4748
*
@@ -281,6 +282,9 @@ mport_upgrade_master_schema(sqlite3 *db, int databaseVersion)
281282
mport_upgrade_master_schema_6to7(db);
282283
mport_upgrade_master_schema_7to8(db);
283284
mport_upgrade_master_schema_8to9(db);
285+
mport_upgrade_master_schema_9to10(db);
286+
mport_upgrade_master_schema_10to11(db);
287+
mport_upgrade_master_schema_11to12(db);
284288
mport_set_database_version(db);
285289
break;
286290
case 2:
@@ -306,13 +310,15 @@ mport_upgrade_master_schema(sqlite3 *db, int databaseVersion)
306310
case 9:
307311
/* falls through */
308312
mport_upgrade_master_schema_9to10(db);
309-
mport_set_database_version(db);
310313
case 10:
311314
/* falls through */
312315
mport_upgrade_master_schema_10to11(db);
313-
mport_set_database_version(db);
314316
case 11:
315-
break;
317+
/* falls through */
318+
mport_upgrade_master_schema_11to12(db);
319+
mport_set_database_version(db);
320+
case 12:
321+
break;
316322
default:
317323
RETURN_ERROR(MPORT_ERR_FATAL, "Invalid master database version");
318324
}
@@ -415,6 +421,15 @@ mport_upgrade_master_schema_10to11(sqlite3 *db)
415421
return (MPORT_OK);
416422
}
417423

424+
static int
425+
mport_upgrade_master_schema_11to12(sqlite3 *db)
426+
{
427+
RUN_SQL(db, "INSERT INTO settings VALUES (\"" MPORT_SETTING_HANDLE_RC_SCRIPTS "\", \"yes\")");
428+
RUN_SQL(db, "INSERT INTO settings VALUES (\"" MPORT_SETTING_REPO_AUTOUPDATE "\", \"yes\")");
429+
430+
return (MPORT_OK);
431+
}
432+
418433
int
419434
mport_generate_master_schema(sqlite3 *db)
420435
{
@@ -443,6 +458,9 @@ mport_generate_master_schema(sqlite3 *db)
443458
RUN_SQL(db, "CREATE TABLE IF NOT EXISTS settings (name text NOT NULL, val text NOT NULL)");
444459
RUN_SQL(db, "CREATE INDEX IF NOT EXISTS settings_name ON settings (name)");
445460

461+
RUN_SQL(db, "INSERT INTO settings VALUES (\"" MPORT_SETTING_HANDLE_RC_SCRIPTS "\", \"yes\")");
462+
RUN_SQL(db, "INSERT INTO settings VALUES (\"" MPORT_SETTING_REPO_AUTOUPDATE "\", \"yes\")");
463+
446464
mport_set_database_version(db);
447465

448466
return (MPORT_OK);

contrib/mport/libmport/default_cbs.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,10 @@ int mport_default_confirm_cb(const char *msg, const char *yes, const char *no, i
7373
/* user just hit return */
7474
return def == 1 ? MPORT_OK : -1;
7575
}
76+
77+
bool answer = mport_check_answer_bool(ans);
7678

77-
if (*ans == 'Y' || *ans == 'y')
79+
if (answer)
7880
return (MPORT_OK);
7981
if (*ans == 'N' || *ans == 'n')
8082
return (-1);

contrib/mport/libmport/delete_primative.c

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ mport_delete_primative(mportInstance *mport, mportPackageMeta *pack, int force)
5858
sqlite3_stmt *stmt;
5959
int ret, current, total;
6060
mportAssetListEntryType type;
61-
const char *data, *checksum, *cwd, *service, *rc_script;
61+
const char *data, *checksum, *cwd;
6262
struct stat st;
6363
char hash[65];
6464

@@ -69,26 +69,7 @@ mport_delete_primative(mportInstance *mport, mportPackageMeta *pack, int force)
6969

7070
mport_call_progress_init_cb(mport, "Deleting %s-%s", pack->name, pack->version);
7171

72-
/* stop any services that might exist; this replaces @stopdaemon */
73-
if (mport_db_prepare(mport->db, &stmt,
74-
"select * from assets where data like '/usr/local/etc/rc.d/%%' and type=%i and pkg=%Q",
75-
ASSET_FILE, pack->name) != MPORT_OK)
76-
RETURN_CURRENT_ERROR;
77-
78-
while (1) {
79-
ret = sqlite3_step(stmt);
80-
if (ret != SQLITE_ROW) {
81-
break;
82-
}
83-
84-
rc_script = sqlite3_column_text(stmt, 0);
85-
if (rc_script == NULL)
86-
continue;
87-
service = basename((char *)rc_script);
88-
if (mport_xsystem(mport, "/usr/sbin/service %s onestop", service) != 0) {
89-
mport_call_msg_cb(mport, "Unable to stop service %s\n", service);
90-
}
91-
}
72+
mport_start_stop_service(mport, pack, SERVICE_STOP);
9273

9374
/* get the file count for the progress meter */
9475
if (mport_db_prepare(mport->db, &stmt,
@@ -293,6 +274,7 @@ mport_delete_primative(mportInstance *mport, mportPackageMeta *pack, int force)
293274
case ASSET_DIRRMTRY:
294275
case ASSET_DIR_OWNER_MODE:
295276
if (is_safe_to_delete_dir(mport, pack, file)) {
277+
mport_removeflags(mport->root, file);
296278
if (mport_rmdir(file, type == ASSET_DIRRMTRY ? 1 : 0) != MPORT_OK) {
297279
mport_call_msg_cb(mport, "Could not remove directory '%s': %s",
298280
file, mport_err_string());
@@ -358,11 +340,25 @@ bool is_safe_to_delete_dir(mportInstance *mport, mportPackageMeta *pack, const c
358340
{
359341
sqlite3_stmt *stmt;
360342
int count;
343+
344+
if (mport == NULL || pack == NULL || path == NULL) {
345+
return false;
346+
}
347+
348+
/* Don't delete the root or the package prefix directories */
349+
if (mport->root != NULL && strcmp(mport->root, path) == 0) {
350+
mport_call_msg_cb(mport, "Skipping removal of root (DESTDIR) directory: '%s'", path);
351+
return false;
352+
}
353+
if (pack->prefix != NULL && strcmp(pack->prefix, path) == 0) {
354+
mport_call_msg_cb(mport, "Skipping removal of package prefix directory: '%s'", path);
355+
return false;
356+
}
361357

362358
if (mport_db_prepare(mport->db, &stmt,
363359
"SELECT count(*) from assets where pkg!=%Q and type in (%d, %d, %d, %d) and data=%Q",
364360
pack->name, ASSET_DIR, ASSET_DIRRM, ASSET_DIRRMTRY, ASSET_DIR_OWNER_MODE, path) != MPORT_OK) {
365-
RETURN_CURRENT_ERROR;
361+
return false;
366362
}
367363

368364
switch (sqlite3_step(stmt)) {

contrib/mport/libmport/mport.3

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,8 @@ If the proxy is an FTP proxy,
225225
.It Ev ASSUME_ALWAYS_YES
226226
If set to a non empty value, will assume any question should be answered
227227
with a yes.
228+
.It Ev HANDLE_RC_SCRIPTS
229+
If set to a non empty value, will start/stop rc.d scripts included in the package.
228230
.Sh SEE ALSO
229231
.Xr mport 1 ,
230232
.Xr mports 7

contrib/mport/libmport/mport.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ enum _AssetListEntryType {
9292
ASSET_FILE_OWNER_MODE, ASSET_DIR_OWNER_MODE,
9393
ASSET_SAMPLE_OWNER_MODE, ASSET_LDCONFIG, ASSET_LDCONFIG_LINUX,
9494
ASSET_RMEMPTY, ASSET_GLIB_SCHEMAS, ASSET_KLD, ASSET_DESKTOP_FILE_UTILS,
95-
ASSET_INFO
95+
ASSET_INFO, ASSET_TOUCH
9696
};
9797

9898
typedef enum _AssetListEntryType mportAssetListEntryType;

0 commit comments

Comments
 (0)