From: José Bollo Date: Tue, 29 Dec 2015 09:11:20 +0000 (+0100) Subject: wgtpkg: spliting of headers X-Git-Tag: 2.0.2~112 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fapp-framework-main.git;a=commitdiff_plain;h=189415eece11c543e1ccb95dff32695ddc383565 wgtpkg: spliting of headers Change-Id: I8ac6a16c936b73c6ce74ee41ae9c5a2ad9d042ee --- diff --git a/src/afm-system-daemon.c b/src/afm-system-daemon.c index 84e8992..70d8656 100644 --- a/src/afm-system-daemon.c +++ b/src/afm-system-daemon.c @@ -284,7 +284,7 @@ int main(int ac, char **av) /* start and run */ if (jbus_start_serving(jbus)) { - ERROR("cant start server"); + ERROR("can't start server"); return 1; } while (!jbus_read_write_dispatch(jbus, -1)); diff --git a/src/afm-user-daemon.c b/src/afm-user-daemon.c index 1459dde..87d7e71 100644 --- a/src/afm-user-daemon.c +++ b/src/afm-user-daemon.c @@ -303,7 +303,7 @@ int main(int ac, char **av) /* start and run */ if (jbus_start_serving(jbus)) { - ERROR("cant start server"); + ERROR("can't start server"); return 1; } while (!jbus_read_write_dispatch(jbus, -1)); diff --git a/src/wgtpkg-base64.c b/src/wgtpkg-base64.c index d86f75a..63929ae 100644 --- a/src/wgtpkg-base64.c +++ b/src/wgtpkg-base64.c @@ -21,7 +21,7 @@ #include #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-base64.h" static char tob64(char x) { diff --git a/src/wgtpkg-base64.h b/src/wgtpkg-base64.h new file mode 100644 index 0000000..90917a9 --- /dev/null +++ b/src/wgtpkg-base64.h @@ -0,0 +1,24 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +extern char *base64encw(const char *buffer, int length, int width); +extern char *base64enc(const char *buffer, int length); +extern int base64dec(const char *buffer, char **output); +extern int base64eq(const char *buf1, const char *buf2); + diff --git a/src/wgtpkg-certs.c b/src/wgtpkg-certs.c index 116e637..7310035 100644 --- a/src/wgtpkg-certs.c +++ b/src/wgtpkg-certs.c @@ -20,7 +20,8 @@ #include #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-certs.h" +#include "wgtpkg-base64.h" struct x509l { int count; diff --git a/src/wgtpkg-certs.h b/src/wgtpkg-certs.h new file mode 100644 index 0000000..6342581 --- /dev/null +++ b/src/wgtpkg-certs.h @@ -0,0 +1,22 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +extern void clear_certificates(); +extern int add_certificate_b64(const char *b64); + diff --git a/src/wgtpkg-digsig.c b/src/wgtpkg-digsig.c index e5a8d74..ed9d089 100644 --- a/src/wgtpkg-digsig.c +++ b/src/wgtpkg-digsig.c @@ -29,7 +29,11 @@ #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-certs.h" +#include "wgtpkg-xmlsec.h" +#include "wgtpkg-digsig.h" diff --git a/src/wgtpkg-digsig.h b/src/wgtpkg-digsig.h new file mode 100644 index 0000000..99c5a56 --- /dev/null +++ b/src/wgtpkg-digsig.h @@ -0,0 +1,28 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* verify the digital signature in file */ +extern int verify_digsig(struct filedesc *fdesc); + +/* create a digital signature */ +extern int create_digsig(int index, const char *key, const char **certs); + +/* check the signatures of the current directory */ +extern int check_all_signatures(); + diff --git a/src/wgtpkg-files.c b/src/wgtpkg-files.c index a89c52b..cbd6048 100644 --- a/src/wgtpkg-files.c +++ b/src/wgtpkg-files.c @@ -27,7 +27,8 @@ #include #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-files.h" struct fdb { unsigned int count; diff --git a/src/wgtpkg-files.h b/src/wgtpkg-files.h new file mode 100644 index 0000000..e3aabf8 --- /dev/null +++ b/src/wgtpkg-files.h @@ -0,0 +1,57 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +enum entrytype { + type_unset = 0, + type_file = 1, + type_directory = 2 +}; + +enum fileflag { + flag_referenced = 1, + flag_opened = 2, + flag_author_signature = 4, + flag_distributor_signature = 8, + flag_signature = 12 +}; + +struct filedesc { + enum entrytype type; + unsigned int flags; + unsigned int signum; + unsigned int zindex; + char name[1]; +}; + +extern void file_reset(); +extern void file_clear_flags(); +extern unsigned int file_count(); +extern struct filedesc *file_of_index(unsigned int index); +extern struct filedesc *file_of_name(const char *name); +extern struct filedesc *file_add_directory(const char *name); +extern struct filedesc *file_add_file(const char *name); +extern int fill_files(); + +extern unsigned int signature_count(); +extern struct filedesc *signature_of_index(unsigned int index); +extern struct filedesc *create_signature(unsigned int number); +extern struct filedesc *get_signature(unsigned int number); + +extern int file_set_prop(struct filedesc *file, const char *name, const char *value); +extern const char *file_get_prop(struct filedesc *file, const char *name); + diff --git a/src/wgtpkg-info.c b/src/wgtpkg-info.c index 18b1118..67d4596 100644 --- a/src/wgtpkg-info.c +++ b/src/wgtpkg-info.c @@ -26,8 +26,14 @@ #include #include +#include + #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-files.h" +#include "wgtpkg-zip.h" +#include "wgtpkg-digsig.h" +#include "wgtpkg-xmlsec.h" #include "wgt.h" #include "wgt-info.h" diff --git a/src/wgtpkg-install.c b/src/wgtpkg-install.c index 70198e9..7b299f2 100644 --- a/src/wgtpkg-install.c +++ b/src/wgtpkg-install.c @@ -18,16 +18,22 @@ #define _GNU_SOURCE +#include #include #include #include #include #include +#include #include "verbose.h" -#include "wgtpkg.h" #include "wgt.h" #include "wgt-info.h" +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-zip.h" +#include "wgtpkg-permissions.h" +#include "wgtpkg-digsig.h" #include "wgtpkg-install.h" #include "secmgr-wrap.h" #include "utils-dir.h" diff --git a/src/wgtpkg-install.h b/src/wgtpkg-install.h index bf3c3a6..f3dd123 100644 --- a/src/wgtpkg-install.h +++ b/src/wgtpkg-install.h @@ -17,4 +17,3 @@ */ extern struct wgt_info *install_widget(const char *wgtfile, const char *root, int force); - diff --git a/src/wgtpkg-installer.c b/src/wgtpkg-installer.c index b5da59f..ea08fce 100644 --- a/src/wgtpkg-installer.c +++ b/src/wgtpkg-installer.c @@ -27,8 +27,11 @@ #include #include +#include + #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-permissions.h" +#include "wgtpkg-xmlsec.h" #include "wgt-info.h" #include "wgtpkg-install.h" diff --git a/src/wgtpkg-pack.c b/src/wgtpkg-pack.c index e7fa752..0eeb4ab 100644 --- a/src/wgtpkg-pack.c +++ b/src/wgtpkg-pack.c @@ -28,17 +28,9 @@ #include #include "verbose.h" -#include "wgtpkg.h" - -#if !defined(MAXCERT) -#define MAXCERT 20 -#endif -#if !defined(DEFAULT_KEY_FILE) -#define DEFAULT_KEY_FILE "key.pem" -#endif -#if !defined(DEFAULT_CERT_FILE) -#define DEFAULT_CERT_FILE "cert.pem" -#endif +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-zip.h" const char appname[] = "wgtpkg-pack"; diff --git a/src/wgtpkg-permissions.c b/src/wgtpkg-permissions.c index 9dabdd0..88bce05 100644 --- a/src/wgtpkg-permissions.c +++ b/src/wgtpkg-permissions.c @@ -20,9 +20,10 @@ #include #include +#include #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-permissions.h" struct permission { char *name; diff --git a/src/wgtpkg-permissions.h b/src/wgtpkg-permissions.h new file mode 100644 index 0000000..b052063 --- /dev/null +++ b/src/wgtpkg-permissions.h @@ -0,0 +1,27 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +extern int is_standard_permission(const char *name); +extern void reset_permissions(); +extern void crop_permissions(unsigned level); +extern void grant_permission_list(const char *list); +extern int permission_exists(const char *name); +extern int request_permission(const char *name); +extern const char *first_usable_permission(); +extern const char *next_usable_permission(); + diff --git a/src/wgtpkg-sign.c b/src/wgtpkg-sign.c index 7851c4a..5a5d019 100644 --- a/src/wgtpkg-sign.c +++ b/src/wgtpkg-sign.c @@ -27,8 +27,13 @@ #include #include +#include + #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-digsig.h" +#include "wgtpkg-xmlsec.h" #if !defined(MAXCERT) #define MAXCERT 20 diff --git a/src/wgtpkg-workdir.c b/src/wgtpkg-workdir.c index e6632f4..e1dcdac 100644 --- a/src/wgtpkg-workdir.c +++ b/src/wgtpkg-workdir.c @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include #include @@ -29,7 +31,7 @@ #include #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-workdir.h" #include "utils-dir.h" static const int dirmode = 0755; diff --git a/src/wgtpkg-workdir.h b/src/wgtpkg-workdir.h new file mode 100644 index 0000000..ff21ab1 --- /dev/null +++ b/src/wgtpkg-workdir.h @@ -0,0 +1,26 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +extern char workdir[PATH_MAX]; +extern int workdirfd; +extern void remove_workdir(); +extern int set_workdir(const char *name, int create); +extern int make_workdir_base(const char *root, const char *prefix, int reuse); +extern int make_workdir(int reuse); +extern int move_workdir(const char *dest, int parents, int force); + diff --git a/src/wgtpkg-xmlsec.c b/src/wgtpkg-xmlsec.c index b31a5d0..2d52cc6 100644 --- a/src/wgtpkg-xmlsec.c +++ b/src/wgtpkg-xmlsec.c @@ -35,7 +35,9 @@ #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-xmlsec.h" static int initstatus; static int initdone; diff --git a/src/wgtpkg-xmlsec.h b/src/wgtpkg-xmlsec.h new file mode 100644 index 0000000..92d7615 --- /dev/null +++ b/src/wgtpkg-xmlsec.h @@ -0,0 +1,23 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +extern int xmlsec_init(); +extern void xmlsec_shutdown(); +extern int xmlsec_verify(xmlNodePtr node); +extern xmlDocPtr xmlsec_create(int index, const char *key, const char **certs); + diff --git a/src/wgtpkg-zip.c b/src/wgtpkg-zip.c index 0b1234b..8168fe7 100644 --- a/src/wgtpkg-zip.c +++ b/src/wgtpkg-zip.c @@ -29,7 +29,9 @@ #include #include "verbose.h" -#include "wgtpkg.h" +#include "wgtpkg-files.h" +#include "wgtpkg-workdir.h" +#include "wgtpkg-zip.h" #define MODE_OF_FILE_CREATION 0640 #define MODE_OF_DIRECTORY_CREATION 0750 diff --git a/src/wgtpkg-zip.h b/src/wgtpkg-zip.h new file mode 100644 index 0000000..03d0433 --- /dev/null +++ b/src/wgtpkg-zip.h @@ -0,0 +1,26 @@ +/* + Copyright 2015 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +/* read (extract) 'zipfile' in current directory */ +extern int zread(const char *zipfile, unsigned long long maxsize); + +/* write (pack) content of the current directory in 'zipfile' */ +extern int zwrite(const char *zipfile); + + diff --git a/src/wgtpkg.h b/src/wgtpkg.h deleted file mode 100644 index e700a9b..0000000 --- a/src/wgtpkg.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - Copyright 2015 IoT.bzh - - author: José Bollo - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - - -#include - -struct filedesc; - -/**************************************************************/ -/* from wgtpkg-base64 */ - -extern char *base64encw(const char *buffer, int length, int width); -extern char *base64enc(const char *buffer, int length); -extern int base64dec(const char *buffer, char **output); -extern int base64eq(const char *buf1, const char *buf2); - -/**************************************************************/ -/* from wgtpkg-certs */ - -extern void clear_certificates(); -extern int add_certificate_b64(const char *b64); - -/**************************************************************/ -/* from wgtpkg-digsig */ - -/* verify the digital signature in file */ -extern int verify_digsig(struct filedesc *fdesc); - -/* create a digital signature */ -extern int create_digsig(int index, const char *key, const char **certs); - -/* check the signatures of the current directory */ -extern int check_all_signatures(); - -/**************************************************************/ -/* from wgtpkg-files */ - -enum entrytype { - type_unset = 0, - type_file = 1, - type_directory = 2 -}; - -enum fileflag { - flag_referenced = 1, - flag_opened = 2, - flag_author_signature = 4, - flag_distributor_signature = 8, - flag_signature = 12 -}; - -struct filedesc { - enum entrytype type; - unsigned int flags; - unsigned int signum; - unsigned int zindex; - char name[1]; -}; - -extern void file_reset(); -extern void file_clear_flags(); -extern unsigned int file_count(); -extern struct filedesc *file_of_index(unsigned int index); -extern struct filedesc *file_of_name(const char *name); -extern struct filedesc *file_add_directory(const char *name); -extern struct filedesc *file_add_file(const char *name); -extern int fill_files(); - -extern unsigned int signature_count(); -extern struct filedesc *signature_of_index(unsigned int index); -extern struct filedesc *create_signature(unsigned int number); -extern struct filedesc *get_signature(unsigned int number); - -extern int file_set_prop(struct filedesc *file, const char *name, const char *value); -extern const char *file_get_prop(struct filedesc *file, const char *name); - -/**************************************************************/ -/* from wgtpkg-permission */ - -extern int is_standard_permission(const char *name); -extern void reset_permissions(); -extern void crop_permissions(unsigned level); -extern void grant_permission_list(const char *list); -extern int permission_exists(const char *name); -extern int request_permission(const char *name); -extern const char *first_usable_permission(); -extern const char *next_usable_permission(); - -/**************************************************************/ -/* from wgtpkg-workdir */ - -extern char workdir[PATH_MAX]; -extern int workdirfd; -extern void remove_workdir(); -extern int set_workdir(const char *name, int create); -extern int make_workdir_base(const char *root, const char *prefix, int reuse); -extern int make_workdir(int reuse); -extern int move_workdir(const char *dest, int parents, int force); - -/**************************************************************/ -/* from wgtpkg-xmlsec */ - -extern int xmlsec_init(); -extern void xmlsec_shutdown(); -extern int xmlsec_verify(xmlNodePtr node); -extern xmlDocPtr xmlsec_create(int index, const char *key, const char **certs); - -/**************************************************************/ -/* from wgtpkg-zip */ - -/* read (extract) 'zipfile' in current directory */ -extern int zread(const char *zipfile, unsigned long long maxsize); - -/* write (pack) content of the current directory in 'zipfile' */ -extern int zwrite(const char *zipfile); - -