Jump to content

Stuajnht

Members
  • Posts

    89
  • Joined

  • Last visited

Reputation

290 Excellent

About Stuajnht

Personal Information

  • Location
    Birmingham
  1. Hi all, I've been doing quite a bit more digging, and now think it's down to our DC having to multiple certificates installed that provide server authentication. According to a Microsoft Technet article (emphasis mine): The first certificate that seems to be listed in the certificates MMC snap-in is a self-signed one for Veeam, followed by the one issued by our internal CA (see attachment). Only the domain controller that has both of these certificates installed has issues, while our other DC is able to run the LDAP search command on Ubuntu 18.04 without issues. From what I can see, there's a few different options: Ignore the issue and use the other DC for LDAP searches (not ideal, just putting it here as a temporary fix) Exporting the LDAPS Certificate and Importing for use with AD DS (we will need to remember to import the certificate when it renews) Create a new certificate that can be used for Veeam and AD (would we need to create a new certificate template based on the Domain Controller one, and add the additional key usage options?) Export the Veeam self-signed certificate, delete it, then import it again so that it's not the first certificate selected (would this even work?) I'm obviously a bit hesitant to make any changes to the certificates due to not wanting to break AD or backups. Does anyone has any advice / guides on the best way forward, or am I going in the wrong direction?
  2. Hi @pete, The ldap.conf files on each server are pretty much the file that is installed with ldap-utils, with the manual addition of TLS_REQCERT at the end of them (given below). I'm not aware of any inhouse CA being added to the Ubuntu 16.04 server. I've also tested with freshly installed VMs. Ubuntu 16.04 works with TLS_REQCERT set to never, whereas 18.04 doesn't. # Ubuntu 16.04 - /etc/ldap/ldap.conf # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example,dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never # TLS certificates (needed for GnuTLS) TLS_CACERT /etc/ssl/certs/ca-certificates.crt TLS_REQCERT never # Ubuntu 18.04 - /etc/ldap/ldap.conf # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example,dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never # TLS certificates (needed for GnuTLS) TLS_CACERT /etc/ssl/certs/ca-certificates.crt TLS_REQCERT never
  3. Hi all, We're currently having a few issues with an Ubuntu 18.04 server being unable to connect / bind over LDAP to our Windows domain controllers. This issue doesn't seem to be apparent on an Ubuntu 16.04 server. The issue has been narrowed down to the new server not liking the certificate that is presented by the DC, but even when setting "TLS_REQCERT never" in /etc/ldap/ldap.conf it is unable to connect. Minimal reproduction steps: # Create 2 servers / VMs - one with Ubuntu 16.04 installed and the other with Ubuntu 18.04 installed # Install LDAP tools sudo apt-get install ldap-utils # Attempt to connect to the server (extra debugging turned on) ldapsearch -H ldap://DC.domain:389 -x -W -D "\teststudent" -b "OU=location,OU=to,DC=user,DC=object" "(sAMAccountName=teststudent)" -d 1 -ZZ The ldapsearch command should fail for both servers. # Ubuntu 16.04 ldap_url_parse_ext(ldap://DC.domain:389) ldap_create ldap_url_parse_ext(ldap://DC.domain:389/??base) ldap_extended_operation_s ldap_extended_operation ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP DC.domain:389 ldap_new_socket: 4 ldap_prepare_socket: 4 ldap_connect_to_host: Trying 172.16.100.21:389 ldap_pvt_connect: fd: 4 tm: -1 async: 0 attempting to connect: connect success ldap_open_defconn: successful ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({) ber: ber_flush2: 31 bytes to sd 4 ldap_result ld 0x564199da17e0 msgid 1 wait4msg ld 0x564199da17e0 msgid 1 (infinite timeout) wait4msg continue ld 0x564199da17e0 msgid 1 all 1 ** ld 0x564199da17e0 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 14:52:18 2019 ** ld 0x564199da17e0 Outstanding Requests: * msgid 1, origid 1, status InProgress outstanding referrals 0, parent count 0 ld 0x564199da17e0 request count 1 (abandoned 0) ** ld 0x564199da17e0 Response Queue: Empty ld 0x564199da17e0 response count 0 ldap_chkResponseList ld 0x564199da17e0 msgid 1 all 1 ldap_chkResponseList returns ld 0x564199da17e0 NULL ldap_int_select read1msg: ld 0x564199da17e0 msgid 1 all 1 ber_get_next ber_get_next: tag 0x30 len 40 contents: read1msg: ld 0x564199da17e0 msgid 1 message type extended-result ber_scanf fmt ({eAA) ber: read1msg: ld 0x564199da17e0 0 new referrals read1msg: mark request completed, ld 0x564199da17e0 msgid 1 request done: ld 0x564199da17e0 msgid 1 res_errno: 0, res_error: <>, res_matched: <> ldap_free_request (origid 1, msgid 1) ldap_parse_extended_result ber_scanf fmt ({eAA) ber: ber_scanf fmt (a) ber: ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (x) ber: ber_scanf fmt (}) ber: ldap_msgfree TLS: peer cert untrusted or revoked (0x42) TLS: can't connect: (unknown error code). ldap_err2string ldap_start_tls: Connect error (-11) additional info: (unknown error code) ldap_free_connection 1 1 ldap_send_unbind ber_flush2: 7 bytes to sd 4 ldap_free_connection: actually freed # Ubuntu 18.04 ldap_url_parse_ext(ldap://DC.domain:389) ldap_create ldap_url_parse_ext(ldap://DC.domain:389/??base) ldap_extended_operation_s ldap_extended_operation ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP DC.domain:389 ldap_new_socket: 3 ldap_prepare_socket: 3 ldap_connect_to_host: Trying 172.16.100.21:389 ldap_pvt_connect: fd: 3 tm: -1 async: 0 attempting to connect: connect success ldap_open_defconn: successful ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({) ber: ber_flush2: 31 bytes to sd 3 ldap_result ld 0x56382dd92270 msgid 1 wait4msg ld 0x56382dd92270 msgid 1 (infinite timeout) wait4msg continue ld 0x56382dd92270 msgid 1 all 1 ** ld 0x56382dd92270 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 13:55:05 2019 ** ld 0x56382dd92270 Outstanding Requests: * msgid 1, origid 1, status InProgress outstanding referrals 0, parent count 0 ld 0x56382dd92270 request count 1 (abandoned 0) ** ld 0x56382dd92270 Response Queue: Empty ld 0x56382dd92270 response count 0 ldap_chkResponseList ld 0x56382dd92270 msgid 1 all 1 ldap_chkResponseList returns ld 0x56382dd92270 NULL ldap_int_select read1msg: ld 0x56382dd92270 msgid 1 all 1 ber_get_next ber_get_next: tag 0x30 len 40 contents: read1msg: ld 0x56382dd92270 msgid 1 message type extended-result ber_scanf fmt ({eAA) ber: read1msg: ld 0x56382dd92270 0 new referrals read1msg: mark request completed, ld 0x56382dd92270 msgid 1 request done: ld 0x56382dd92270 msgid 1 res_errno: 0, res_error: <>, res_matched: <> ldap_free_request (origid 1, msgid 1) ldap_parse_extended_result ber_scanf fmt ({eAA) ber: ber_scanf fmt (a) ber: ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (x) ber: ber_scanf fmt (}) ber: ldap_msgfree TLS: can't connect: Key usage violation in certificate has been detected.. ldap_err2string ldap_start_tls: Connect error (-11) additional info: Key usage violation in certificate has been detected. ldap_free_connection 1 1 ldap_send_unbind ber_flush2: 7 bytes to sd 3 ldap_free_connection: actually freed Edit the LDAP client config file on each Ubuntu server to accept any certificates presented to it: echo "TLS_REQCERT never" | sudo tee -a /etc/ldap/ldap.conf Run the ldapsearch command again. For us, it succeeds on the Ubuntu 16.04 server but fails on the Ubuntu 18.04 server. # Ubuntu 16.04 ldap_url_parse_ext(ldap://DC.domain:389) ldap_create ldap_url_parse_ext(ldap://DC.domain:389/??base) ldap_extended_operation_s ldap_extended_operation ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP DC.domain:389 ldap_new_socket: 4 ldap_prepare_socket: 4 ldap_connect_to_host: Trying 172.16.100.21:389 ldap_pvt_connect: fd: 4 tm: -1 async: 0 attempting to connect: connect success ldap_open_defconn: successful ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({) ber: ber_flush2: 31 bytes to sd 4 ldap_result ld 0x5589849897e0 msgid 1 wait4msg ld 0x5589849897e0 msgid 1 (infinite timeout) wait4msg continue ld 0x5589849897e0 msgid 1 all 1 ** ld 0x5589849897e0 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 14:52:57 2019 ** ld 0x5589849897e0 Outstanding Requests: * msgid 1, origid 1, status InProgress outstanding referrals 0, parent count 0 ld 0x5589849897e0 request count 1 (abandoned 0) ** ld 0x5589849897e0 Response Queue: Empty ld 0x5589849897e0 response count 0 ldap_chkResponseList ld 0x5589849897e0 msgid 1 all 1 ldap_chkResponseList returns ld 0x5589849897e0 NULL ldap_int_select read1msg: ld 0x5589849897e0 msgid 1 all 1 ber_get_next ber_get_next: tag 0x30 len 40 contents: read1msg: ld 0x5589849897e0 msgid 1 message type extended-result ber_scanf fmt ({eAA) ber: read1msg: ld 0x5589849897e0 0 new referrals read1msg: mark request completed, ld 0x5589849897e0 msgid 1 request done: ld 0x5589849897e0 msgid 1 res_errno: 0, res_error: <>, res_matched: <> ldap_free_request (origid 1, msgid 1) ldap_parse_extended_result ber_scanf fmt ({eAA) ber: ber_scanf fmt (a) ber: ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (x) ber: ber_scanf fmt (}) ber: ldap_msgfree Enter LDAP Password: ldap_sasl_bind ldap_send_initial_request ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({i) ber: ber_flush2: 36 bytes to sd 4 ldap_result ld 0x5589849897e0 msgid 2 wait4msg ld 0x5589849897e0 msgid 2 (infinite timeout) wait4msg continue ld 0x5589849897e0 msgid 2 all 1 ** ld 0x5589849897e0 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 14:53:00 2019 ** ld 0x5589849897e0 Outstanding Requests: * msgid 2, origid 2, status InProgress outstanding referrals 0, parent count 0 ld 0x5589849897e0 request count 1 (abandoned 0) ** ld 0x5589849897e0 Response Queue: Empty ld 0x5589849897e0 response count 0 ldap_chkResponseList ld 0x5589849897e0 msgid 2 all 1 ldap_chkResponseList returns ld 0x5589849897e0 NULL ldap_int_select read1msg: ld 0x5589849897e0 msgid 2 all 1 ber_get_next ber_get_next: tag 0x30 len 16 contents: read1msg: ld 0x5589849897e0 msgid 2 message type bind ber_scanf fmt ({eAA) ber: read1msg: ld 0x5589849897e0 0 new referrals read1msg: mark request completed, ld 0x5589849897e0 msgid 2 request done: ld 0x5589849897e0 msgid 2 res_errno: 0, res_error: <>, res_matched: <> ldap_free_request (origid 2, msgid 2) ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (}) ber: ldap_msgfree ldap_search_ext put_filter: "(sAMAccountName=teststudent)" put_filter: simple put_simple_filter: "sAMAccountName=teststudent" ldap_send_initial_request ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({) ber: ber_flush2: 99 bytes to sd 4 ldap_result ld 0x5589849897e0 msgid -1 wait4msg ld 0x5589849897e0 msgid -1 (infinite timeout) wait4msg continue ld 0x5589849897e0 msgid -1 all 0 ** ld 0x5589849897e0 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 14:53:00 2019 ** ld 0x5589849897e0 Outstanding Requests: * msgid 3, origid 3, status InProgress outstanding referrals 0, parent count 0 ld 0x5589849897e0 request count 1 (abandoned 0) ** ld 0x5589849897e0 Response Queue: Empty ld 0x5589849897e0 response count 0 ldap_chkResponseList ld 0x5589849897e0 msgid -1 all 0 ldap_chkResponseList returns ld 0x5589849897e0 NULL ldap_int_select read1msg: ld 0x5589849897e0 msgid -1 all 0 ber_get_next ber_get_next: tag 0x30 len 5110 contents: read1msg: ld 0x5589849897e0 msgid 3 message type search-entry ldap_get_dn_ber ber_scanf fmt ({ml{) ber: ldap_dn2ufn ldap_dn_normalize ber_scanf fmt ({xx) ber: ldap_get_attribute_ber // // snip... // # extended LDIF # # LDAPv3 # base with scope subtree # filter: (sAMAccountName=teststudent) # requesting: ALL # # Test Student, Test, Students, Curriculum, DC.domain dn: CN=Test Student,OU=Test,OU=Students,OU=Curriculum,DC=****,DC=***** objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user cn: Test Student sn: Student givenName: Test // // snip... // ldap_result ld 0x5589849897e0 msgid -1 wait4msg ld 0x5589849897e0 msgid -1 (infinite timeout) wait4msg continue ld 0x5589849897e0 msgid -1 all 0 ** ld 0x5589849897e0 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 14:53:00 2019 ** ld 0x5589849897e0 Outstanding Requests: * msgid 3, origid 3, status InProgress outstanding referrals 0, parent count 0 ld 0x5589849897e0 request count 1 (abandoned 0) ** ld 0x5589849897e0 Response Queue: Empty ld 0x5589849897e0 response count 0 ldap_chkResponseList ld 0x5589849897e0 msgid -1 all 0 ldap_chkResponseList returns ld 0x5589849897e0 NULL read1msg: ld 0x5589849897e0 msgid -1 all 0 ber_get_next ber_get_next: tag 0x30 len 16 contents: read1msg: ld 0x5589849897e0 msgid 3 message type search-result ber_scanf fmt ({eAA) ber: read1msg: ld 0x5589849897e0 0 new referrals read1msg: mark request completed, ld 0x5589849897e0 msgid 3 request done: ld 0x5589849897e0 msgid 3 res_errno: 0, res_error: <>, res_matched: <> ldap_free_request (origid 3, msgid 3) ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (}) ber: ldap_err2string ldap_msgfree ldap_free_connection 1 1 ldap_send_unbind ber_flush2: 7 bytes to sd 4 ldap_free_connection: actually freed # search result search: 3 result: 0 Success # numResponses: 2 # numEntries: 1 # Ubuntu 18.04 ldap_url_parse_ext(ldap://DC.domain:389) ldap_create ldap_url_parse_ext(ldap://DC.domain:389/??base) ldap_extended_operation_s ldap_extended_operation ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP DC.domain:389 ldap_new_socket: 3 ldap_prepare_socket: 3 ldap_connect_to_host: Trying 172.16.100.21:389 ldap_pvt_connect: fd: 3 tm: -1 async: 0 attempting to connect: connect success ldap_open_defconn: successful ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({) ber: ber_flush2: 31 bytes to sd 3 ldap_result ld 0x56422b678270 msgid 1 wait4msg ld 0x56422b678270 msgid 1 (infinite timeout) wait4msg continue ld 0x56422b678270 msgid 1 all 1 ** ld 0x56422b678270 Connections: * host: DC.domain port: 389 (default) refcnt: 2 status: Connected last used: Thu May 2 13:55:26 2019 ** ld 0x56422b678270 Outstanding Requests: * msgid 1, origid 1, status InProgress outstanding referrals 0, parent count 0 ld 0x56422b678270 request count 1 (abandoned 0) ** ld 0x56422b678270 Response Queue: Empty ld 0x56422b678270 response count 0 ldap_chkResponseList ld 0x56422b678270 msgid 1 all 1 ldap_chkResponseList returns ld 0x56422b678270 NULL ldap_int_select read1msg: ld 0x56422b678270 msgid 1 all 1 ber_get_next ber_get_next: tag 0x30 len 40 contents: read1msg: ld 0x56422b678270 msgid 1 message type extended-result ber_scanf fmt ({eAA) ber: read1msg: ld 0x56422b678270 0 new referrals read1msg: mark request completed, ld 0x56422b678270 msgid 1 request done: ld 0x56422b678270 msgid 1 res_errno: 0, res_error: <>, res_matched: <> ldap_free_request (origid 1, msgid 1) ldap_parse_extended_result ber_scanf fmt ({eAA) ber: ber_scanf fmt (a) ber: ldap_parse_result ber_scanf fmt ({iAA) ber: ber_scanf fmt (x) ber: ber_scanf fmt (}) ber: ldap_msgfree TLS: can't connect: Key usage violation in certificate has been detected.. ldap_err2string ldap_start_tls: Connect error (-11) additional info: Key usage violation in certificate has been detected. ldap_free_connection 1 1 ldap_send_unbind ber_flush2: 7 bytes to sd 3 ldap_free_connection: actually freed I have searched under various different terms, but all of them pretty much suggest changing the ldap.conf file and it should work. I'm beginning to think that there's something else weird happening on our domain, but have run out of ideas for other things to check or change. If anyone can suggest any ideas I'm happy to give them a go. Thanks in advance.
  4. Hi all, I know there's a variety of threads regarding various internal school staff being designated as the DPO, so my apologies if this goes over an already discussed topic. As usual our school has left things till the last moment, and this evening I've had a call from the head asking me who would be a suitable temporary DPO until they buy some support in. Eventually it settled (mostly directed by the head) on my colleague in the IT department, as there doesn't seem to be anyone else suitable. I'm not happy nor convinced this is the best choice for the DPO role, but the head has given the following reasons: Any data-related tasks and permissions could be removed from their job (e.g. no access to SIMS) but can still perform tasks like resetting passwords and fixing hardware It would only be a temporary position until there is someone appointed They are already aware of the systems that we use and how they are set up All other staff in school need to use data in some way for their day-to-day job (teachers, LSAs, admin). The maintenance department doesn't, but they don't know enough about how data is used in school to be suitable The DPO role will mostly be watching a mailbox for any email requests (paraphrasing a bit here), with a weekly meeting with the head advising him of any compliance issues and changes to be made as to how data is used So far I can come up with the following arguments as to why it won't be suitable: I am aware the DPO cannot be the NM, but I'm not sure about IT technicians (we essentially do the same job, I've just been there longer). Various agencies who have given basic staff training have said that it can't be anyone from the IT department Once various access permissions are removed it's essentially now a different role, but then I'm not sure how they would then be able to do most of the IT jobs logged They haven't been on any training for a DPO role If there is an IT-related data breach, they would sort-of be investigating themselves My colleague will be on holiday next week (half term) so there won't be anyone monitoring for requests (unlikely we'll get any, but we do have a few parents who like to cause problems) Personally it doesn't feel right to have the role "forced" on them (I'm assuming there won't be any financial incentive to take the role either, as it hasn't been mentioned, but that's a different discussion to have) Does anyone have any suggestions as to why this wouldn't be a suitable option, or have I got some bad news to break to my colleague in the morning? (Thanks in advance for any responses, I appreciate it's late-ish when I'm posting this)
  5. Hi @BigG, Thanks for your appreciation and feedback! It's very much appreciated. With regards to your problem of videos starting to upload then refreshing, this is something that I've been made aware of at our site last week. I'm unsure what's actually causing it, but am currently looking into the problem as it's quite annoying. I'm thinking it may be related to an update to the AVEVideoEncoder made in 10.3.2 which has broken some things. Request for Assistance Do you (or anyone else who wants to help) have any devices running older versions of iOS prior to, as well as, 10.3.2? If so, would you be able to test if uploading videos in the app works correctly and let me know the result please for each iOS version. Thanks to all in advance.
  6. Hi @TomMagee, Sorry for the delay in getting back to you... end of term busyness and all that. Currently the app does have an undocumented feature (because I forgot to document it!) where the user is automatically logged out based on the following conditions all being true: The timetable plugin is set up correctly in HAP+ and the users timetable can be collected The device is set up in "shared" mode The current user was in a timetabled lesson when they logged in to the app and the lesson has now finished Other than that, the app is designed to stay logged in continuously as per the Apple app guidelines to restore the previous state of the app when it is opened up again. However, I can see how your idea will be useful to prevent any accidental access to data if a user does not log out of the app when they have finished using it. Thanks for your suggestion, and I'll add it as a feature to the app in a later version.
  7. Hi @beneal, Thanks very much for your appreciation of the app. To answer your questions: MDM plist I'll need to have a look to see how this can be achieved. There's currently very little resources for it online (one or two websites) so it may involve some playing around until I can get that working. Multisite Access Currently not being able to change the server details is by design. We are an all-through school on one site, so it didn't cross my mind to allow for such a feature. The reasoning behind it not being able to be removed was I didn't want to spend all of my time having to put the server details back in when the students would inevitably change it. As removing the app is the only way to delete it, and removing apps is restricted for our students, it was the only way I could see it working. I am currently adding in multisite ability to the app (see screenshot for a general preview of how it will look). If you're happy to, PM me a contact email and I can add you to the TestFlight group for testing. This allows me to provide the app to certain users before being put onto the App Store, so any bugs with new features can be spotted.
  8. Hi, Thanks for letting me know. Do you mean the "upload file" option from the menu? If so, due to the way Apple restrict apps and sharing files, you will need to share the file from the other app to the HAP+ app for it to show there. You can see it in action here (the design of the app has changed slightly, but the steps are the same): https://www.youtube.com/embed/cpr7Ar-a5MA?start=162&end=182&autoplay=1&modestBranding=1&rel=0
  9. Hi all, For those of you who are having problems getting past the login screen, if your tests from the SSL Labs website are coming back fine, could you also check with this website too: https://apptransport.info/ This will let you know if the HAP+ server settings are compliant with Apple's App Transport Security requirements, or what changes may need to be made on your server to allow the app to connect.
  10. Normally the first step I ask for is to run a test against SSL Labs to see what the certificates are being shown as: https://www.ssllabs.com/ssltest/index.html I'll need to have a link to the results page that is generated, but as most people probably don't want to publicly list their school details, feel free to PM them should a problem not be obvious. I would say yes, but it could also depend on how you've got IIS bindings set up and what listens when connections come in. If your bindings for port 443 have different IP addresses (normally: 127.0.0.1, *, ) then the certificates need to be the same for all.
  11. PM sent with some initial information. Please let me know the result and I'll have a look. Strange... well, as long as it works! Currently that is by design as we're only a single-site school so didn't have a need for it, nor did I want students messing around and removing the settings. As it's now been requested I'll add it to the to-do list and see what needs to be changed.
  12. Hi @ass17, It looks like your SSL setup isn't quite right, as the intermediate certificates don't seem to get sent from your server. I've just sent you a PM with some details. Could you have a look and let me know if it helps? Thanks
  13. Hi all, After what seems like a very long time, I've finally been able to get around to uploading the app to the App Store. The direct link is: https://itunes.apple.com/app/home-access-plus/id1076118300 There are a few additional features that I want to make in future versions, but for the meanwhile you're now able to install the app onto as many devices as needed, instead of the 10 device limit enforced by TestFlight. A thank you to all testers, and for your suggestions of items to add to the app.
  14. The theme is from this website: https://startbootstrap.com/template-overviews/freelancer/ (I'm nowhere talented enough to make something look that nice). The back end is just plain old PHP.
  15. Thought I'd take your idea and run with it... https://www.howmuchhasbeensent.com/ It's been thrown together very quickly, already needs to be rewritten as version 2, but it should at least provide an overall figure and current currency conversion (no graphs yet - they're difficult to do). Please play nice with it everyone.
×
×
  • Create New...